- H ®
I M p lUO^
___ .^ ue
, *•** . BO
-r
* ed*^ *
^bvjo
lt ACU^ e 58
oEt " j0 "° '* s v»' E '' 1,0
, cou^ eN a
C.\»
V.o* ' i
T.rv>"r
v
* %E 4 ^ 6
♦VL 4 °°
*
. . A \
_ _
- »t 4i *L
ft
v, ****
ML
. , ES-W ^ £ r 2p»P' Ct S>
*&? % 'Sfegb
%%
,.C A-r®
.r&s^
*9*.
-9
%%
- ?e& ■
\S 4 £ Vs ' ‘° - *•’*
* veE#' ■ , » v
i
PILOT
H B STEWART
. TITLE "PILOT — H. B STEWART"
PILOT PROGRAM EQUATE FILE
EDIT #59 — 1 -DECEMBER-80
OOOO
DEBUG-0 ; INCLUDE DEBUG CODE IF 1/ DON'T IF O
; COLLEEN SYSTEM I/O
E456
CIO
= $E456
E400
IOVBAS
= $E400
E406
EPUTC
= $E406
E414
SGETC
= $E4 1 4
E416
SPUTC
= $E4 1 6
E4 1 A
SSPEC
= $E4 1 A
0010
IOCBSZ
= 16
0000
IOCBO
= $00
0010
I0CB1
= I OCBO+ IOCBSZ
0020
I0CB2
= I0CB1+I0CBSZ
0030
I0CB3
= I QCB2+ IOCBSZ
0040
I0CB4
= IOCB 3+ IOCBSZ
0070
I0CB7
= 3*ICCBSZ+I0CB4
0340
ICHID
= $0340
0341
ICDNO
= ICHID+1
0342
ICCOM
= ICDNO+1
0343
ICSTA
= ICCOM+1
0344
ICBAL
= ICSTA+1
0345
ICBAH
= ICBAL+1
0346
*
ICRLL
= ICBAH+1
0347
ICRLH
= ICRLL+1
0348
ICBLL
= ICRLH+1
0349
ICBLH
= ICBLL+1
034A
ICAUX1
= ICBLH+1
034B
ICAUX2
= ICAUX1+1
0022
ICCOMZ
= $0022 i
0003
OPEN
» $03 ;
OOOC
CLOSE
= $0C ;
0007
GETC
= $07 j
OOOB
PUTC
= $0B ;
0005
GETR
= $05
0009
PUTR
= $09 ;
0011
DRAW
= $11 j
0012
FILL
= $12 ;
0004
OREAD
= $04
0008
0 WRIT
= $08
0010
SPLIT
= $10 i
0020
NOCLR
= $20 i
COLLEEN VECTOR BASE ADDRESS.
"E: " PUT CHARACTER.
"S: " GET CHARACTER.
"S: " PUT CHARACTER.
"S: " SPECIAL.
# OF BYTES PER IOCB.
CONSOLE I NPUT /OUTPUT.
(UNUSED).
GRAPHICS INPUT & OUTPUT.
LOAD & SAVE I/O.
IN: & OUT: USE I0CE4 THRU I0CB7.
IOCB HANDLER I. D.
DEVICE #. -
COMMAND BYTE.
STATUS BYTE.
BUFFER ADDRESS (LO).
BUFFER ADDRESS (HI).
RECORD LENGTH (L.0).
RECORD LENGTH (HI).
BUFFER LENGTH (LO).
BUFFER LENGTH (HI).
AUX 1 .
AUX2.
ZERO PAGE IOCB COMMAND BYTE.
OPEN COMMAND.
CLOSE COMMAND.
GET CHARACTER COMMAND.
PUT CHARACTER COMMAND.
GET RECORD COMMAND.
PUT RECORD COMMAND.
DRAW LINE.. SPECIAL COMMAND.
FILL SPECIAL COMMAND.
OPEN DIRECTION.
OPEN DIRECTION.
SPLIT SCREEN OPTION.
INHIBIT SCREEN CLEAR OPTION.
001C
CUP
= $1C
; CURSOR
UP.
001D
CDOWN
= $ 1 D
; CURSOR
DOWN.
001E
CLEFT
= $ 1 E
; CURSOR
LEFT.
001F
CRIGHT
= $ 1 F
; CURSOR
RIGHT.
PILOT
H. B. STEWART
—
OOIE
OOIF
CLEFT
CRIGHT
* 1 E
*1F
i CURSOR LEFT
i CURSOR RIGHT
PILOT — H B STEWART
009B
EOL
= *9B
007D
CLEAR
* *7D
OOFD
BELL
= *FD
; COLLEEN DATA BASE
02E7
MEMLO
= S02E7
02E5
MEMHI
= *02E5
OOOE
APPMHI
= ♦OOOE
0011
BREAK
= *0011
02FC
CH
= *02FC
02F0
CRSINH
= *02F0
02FE
DSPFLG
= *02FE
0232
SSKCTL
= *0232
0012
RTCLOK
= *0012
0052
LMARGN
= *0052
0053
RMARGN
= *0053
0055
COLCRS
= *0055
0054
ROWCRS
= *0054
00 5B
OLDCOL
= *005B
00 5 A
OLDROW
= *005A
02FB
ATACHR
= *02FB
02FD
FILDAT
= *02FD
0008
WARMST
= *0008
OOOA
DOSVEC
= *000A
E471
BYELOC
= *E47 1
02C4
COLORO
= *02C4
0270
PADDLO
= *0270
0278
STICKO
= *0278
027C
PTRIGO
= *027C
0284
STRIGO
= *0284
0234
LPENH
= *0234
0235
LPENV
= *0235
0291
TXTCOL
= *0291
02B6
INVFLG
= *02B6
; PILOT
ERROR CODES
0080
NS
= *80
0001
RDYTXT
= 1
0081
EOPERR
* 1+NS
0081
AUTOXT
= 1+NS
0002
CNDERR
= 2
0002
NSTERR
= 2
0081
ENDERR
= 1+NS
0002
JNKERR
= 2
0086
IOERR
= 6+NS
0002
IVCERR
= 2
0002
ATMERR
= 2
0002
IMPERR
= 2
0089
INSERR
= 9+NS
0087
ABTERR
= 7+NS
OOOA
UNDERR
= 10
008B
USOERR
= 11+NS
0002
EXPERR
= 2
008C
INTERR
= 12+NS
008D
LNOERR
= 13+NS
i
14
OOOF
OLLERR
= 15
i
16-21
ATASCII END OF LINE.
MONITOR CLEAR SCREEN.
BELL CODE.
i LOWEST AVAILABLE RAM CWORDD.
i HIGHEST AVAILABLE RAM CWORD3.
i APPLICATION MEM HI CWORDD.
I. BREAK KEY FLAG.
; KEYBOARD MATRIX CODE INPUT.
i CURSOR INHIBIT FLAG.
; CONTROL BYTE DISPLAY FLAG.
i 60 HZ CLOCK.
; SCREEN LEFT MARGIN.
; SCREEN RIGHT MARGIN.
i SCREEN COLUMN [WORD 1 .
> SCREEN ROW CBYTED .
; OLD SCREEN COLUMN.
; OLD SCREEN ROW.
i LAST ATASCII CHARACTER OR PLOT POINT.
; FILL DATA.
; WARMSTART FLAG (0 IF POWERUP ) .
; DOS START VECTOR.
; BLACK BOARD ENTRY POINT.
; COLOR REGISTER 0 VALUE,
i PADDLE CONTROLLER 0.
; JOYSTICK 0.
i PADDLE TRIGGER 0.
; JOYSTICK TRIGGER 0.
; LIGHTPEN HORIZONTAL POSITION.
; LIGHTPEN VERTICAL POSITION.
; SPLIT SCREEN TEXT COLUMN,
i INVERSE VIDEO FLAG FOR KEYBOARD.
; "NOT A SYNTAX ERROR " FLAG.
; READY.
; END OF PROGRAM STORAGE REACHED DURING RUN.
i EXIT AUTO-INPUT MODE.
; CONDITION FIELD ERROR (': ' EXPECTED).
; GRAPHICS SUB-COMMAND NESTING ERROR,
i USE STACK EMPTY ON END COMMAND.
; JUNK AT END OF STATEMENT.
; I/O ERROR.
; INVALID COMMAND.
; INVALID ATOM SYNTAX.
; IMPROPER COMMAND PARAMETER.
; INSUFFICIENT STORAGE FOR OPERATION.
; OPERATOR ABORT,
i UNDEFINED LABEL OPERAND.
; USE STACK OVERFLOW.
; EXPRESSION ERROR,
i INTERNAL BUG ERROR.
; LINE # OUT OF RANGE.
IS RESERVED.
; OVERLENGTH INPUT LINE.
ARE RESERVED.
PILOT
H B STEWART
0096
FILERR
* 22-*-NS
i
TOO MANY IN/OUTS
0017
SIGNON
« 23
i
POWER-UP SIGN-ON MESSAGE
0018
TRCMES
» 24
t
TRACE PREAMBLE
|
8
i
IS RESERVED.
0003
NRCERR
« 3 ■♦■NS
NOT RUN MODE COMMAND; IMMEDIATE ONLY.
0084
DIVERR
« 4 •♦■NS
DIVIDE BY ZERO.
0083
SCNERR
« 5 ■♦■NS
SCREEN MODE CONFLICT.
i ATOM
IDENTIFIER CODES
(PRODUCED BY 'ATOM')
0001
NULL
* 1
»
NULL ATOM.
0002
NUM
» 2
i
NUMERIC CONSTANT.
0004
NVAR
m 4
i
NUMERIC VARIABLE OR POINTER TO WORD.
0008
SVAR
* 8
STRING VARIABLE.
0010
USVAR
* 16
UNDEFINED STRING VARIABLE.
0020
TEXT
= 32
TEXT.
0040
OPR
= 64
OPERATOR.
0080
BPTR
■ 128
POINTER TO BYTE.
; EDGE
DETECT STATUS
BITS
0008
ELEFT
= 8
LEFT EDGE.
0004
ERIGHT
= 4
RIGHT EDGE.
0002
EBOTOM
= 2
BOTTOM EDGE.
0001
ETOP
= 1
TOP EDGE.
; PILOT
CONFIGURATION
PARAMETERS.
0010
USTKSZ
= 16
8 LEVELS IN USE STACK.
0002
ELEVEL
= 2
# OF EXPRESSION STACK () LEVELS.
OOOE
ESTKSZ
= 4*ELEVEL+6
EXPRESSION STACK SIZE.
OOFE
ACCLNG
= 254
ACCEPT BUFFER LENGTH.
OOFE
TEXLNG
= 254
TEXT EXPRESSION BUFFER LENGTH.
007A
LINLNG
= 122
COMMAND/ACCEPT INPUT LINE LENGTH.
270F
MAXLN
_ 9999
MAXIMUM PROGRAM LINE NUMBER.
0004
AUREGS
= 4
4 AUDIO REGISTERS.
0007
SCNMOD
= 7
4 COLOR/ 160 * 96.
OOOF
DNS I Z E
= 15
DEVICE/FILENAME MAXIMUM LENGTH.
0050
XC
= 80
GRAPHICS SCREEN CENTER X AXIS.
0030
YC
= 48
GRAPHICS SCREEN CENTER Y AXIS.
0028
TCOL
= 40
TEXT SCREEN # OF COLUMNS.
0018
TROW
= 24
TEXT SCREEN # OF ROWS.
; COLLEEN HARDWARE EQUATES
D200
AUDF1
=
$D200
D201
AUDC1
=
AUDF1+1
D20F
SKCTL
=
$D20F
D20F
SKSTAT
=
$D20F
D208
AUDCTL
ss
$D208
D302
PACTL
=
$D302
00B4
CASSON
=
*34+$80
OOBC
CASSOF
==
$3C+*80
D20A
PKYRND
=r
$D20A
AUDIO #1 FREQUENCY DIVIDER.
AUDIO #1 TYPE/VOLUME.
SERIAL PORT CONTROL.
SERIAL PORT STATUS.
AUDIO CONTROL REGISTER.
P I A CASSETTE CONTROL.
CASSETTE ON.
CASSETTE OFF.
POKEY RANDOM NUMBER.
; MISCELLANEOUS
= 4
0004
PCUP
PEN COLOR
'UP '.
PILOT
H. B. STEWART
> $
i PILOT DATA BASE
0080
*=$0080
DTAB
=*
0080
I NLN
# = #•4-4
0084
NXTLN
*=*+2
0086
AC0LR2
* = #•4-1
0087
AC0LR1
#=#+ 1
0088
ACLN
*=*+4
008C
TELN
#=#-4-4
0090
USTKP
#=#+ 1
0091
ESTKP
*=#+1
0092
EXEC
#=#+i
0093
EXPSTK
*=#+ESTKSZ
OOA 1
TEMP
*=#+6
00A7
TEMP2
#=#+4
OOAB
XTEMP
OOAE
S1L
#=#+2
OOBO
S1H
*=#+2
00B2
S2L
*=#+2
00B4
S2H
#=#+2
00B6 POINT *=*+2
00B8 NUMBER *=*+2
OOBA
OOBE
00C2
00C6
OOCA
OOCE
#=*+4
* = #■ 4-4
#=#+4
# = #•4-4
#=#+4
*=#+4
00D2
MEMA
#=#-t-2
00D4
MEMB
#=*+2
00D6
l MSP
#=#+2
00D8
\ MDP
#=#+2
OODA
MBC
#=*+2
OODC
LINENO
#=#+2
OODE
LS
#=*+2
OOEO
LE
*=#+2
00E2
MFDEL
00E2
ACC
*=#+2
00E4
I0STAT
#=*+2
00E6
00E9
OOEC
OOEF
00F2
00F4
OOFS
00F9
GXNEW
GYNEW
GX
GY
THETA
GNUMB
XXXX
ALINE
#=#+3
#=#+3
#=#+3
#=#+3
#=#+2
•#-# + 4
#=#+ 1
*=#+2
BASE ADDRESS FOR DXXXI UTILITIES b OTHERS.
INPUT LINE POINTER.
NEXT LINE POINTER (RUN MODE).
AUTO-NUMBER COLOR REGISTER 2.
AUTO-NUMBER COLOR REGISTER 1.
ACCEPT LINE POINTER.
TEXT EXPRESSION RESULT POINTER.
; USE STACK POINTER (0 - N*2>.
i EXPRESSION STACK POINTER.
i 0 = SYNTAX CHECKi ELSE EXECUTE (FOR X-ROUTINES).
; EXPRESSION STACK.
; TEMPORARY STORAGE FOR BOTTOM LEVEL ROUTINES,
i MORE TEMPORARY STORAGE.
; TEMPORARY STORAGE FOR X-ROUTINES.
; DYNAMIC STORAGE AREA LIMITS.
i 'ATOM' RETURN PARAMETER ?< 'PSF' WORK POINTER.
; 'ATOM' RETURN PARAMETER & 'PSTOP ' ERROR # SAVE.
STRING PACKAGE LIST POINTER.
NAME POINTER.
DATA POINTER.
PATTERN MATCH POINTER.
SOURCE POINTER (BOTTOM LEVEL).
PATTERN POINTER (BOTTOM LEVEL). OYerlcO
MEMORY MANAGEMENT ADDRESS PARAMETER.
BYTE COUNT PARAMETER.
SOURCE POINTER.
DESTINATION POINTER.,
WORKING BYTE COUNT.
STATEMENT LINE # (MUST BE IN ZERO PAGE).
' XLIST ' START LINE #, ' XGRAPH ' ITERATION COUNT & 'SCNDEV'.
'XL I ST' END LINE #, 'GMOVE' REGISTER SAVE & 'SCNDEV'.
MATCH FIELD DELIMITER (', ' OR ' « ' •
WORKING NUMERIC ACCUMULATOR.
COLLEEN I/O ERROR STATUS C WORD] .
GRAPHICS NEXT POSITION ( LSB, MSB, FRACT ION ) .
GRAPHICS X POSITION ( LSBi MSB, FRACTION ) .
GRAPHICS Y POSITION ( LSB, MSB, FRACTION ) .
POLAR ANGLE.
GRAPHICS WORKING STORAGE. & 'XACCPT' TEMPORARY
'SCNDEV' 8t 'PSTOP' USE.
AUTO- INPUT & RENUMBER LINE NUMBER.
PILOT
H B. STEWART
OOF 8
AINC
*■*♦2
i AUTO-INPUT & RENUMBER LINE INCREMENT.
OOFD
MATCHF
**•+ 1
; MATCH RESULT (0 * FALSE, ELSE MATCH FIELD #>.
OOFE
EXECF
i CONDITION RESULT (0 - NO EXECUTE, ELSE EXECUTE)
OOFF
RUN
i
i 0 - IMMEDIATE MODE, ELSE RUN MODE.
i REDEFINES OF STRING
& MEM MNGMT
VARIABLES FOR GRAPHICS USE
OOBE
GX1
* NP
l WORKING
X C3 BYTES! .
OOC1
GY 1
* GX 1*3
i
Y C3 BYTES!.
00C4
GX2
» GY1+3
i
X 13 BYTES!.
00C7
GY2
* GX2+3
|
Y C3 BYTES!.
OOCA
DELX
* GY2+3
i
DELTA X C2 BYTES!.
OOCC
DELY
- DELX+2
1
Y C2 BYTES!.
OOCE
GACC
* DELY+2
i WORKING
ACCUMULATOR C4 BYTES!.
00D2
GTEMP
* GACC+4
i
TEMP C4 BYTES!.
00D6
GTEMP2
* GTEMP -*-4
i
TEMP C 4 BYTES!.
*=*0500
0500
IOEDIS
*=*+2 i
0502
X JUMP
i
*=#■+3 ;
0505
GJUMP
0508
S JUMP
*=*+3 i
050B
USESTK
*=*+USTKSZ ;
051B
VAR TAB
*=*+52 ;
054F
CTABXR
•*=*+2 ;
0551
DIGIT
*=*+1
0552
SAVYR
*=*+1 ;
0553
PEN
*=#+1 ;
0554
GRFLAG
*=*+1 ;
0555
AUDI OR
*=*+AUREGS+AUREGS
055D
AUX 1
*=#+1 ;
055E
AUX2
*- = ■»•+• 1 ;
*=*+1 ;
0560
OPNBUF
*=*+DNSI ZE+1 ;
0570
CDEST
•*=*.+2 ;
0572
LOADFG
•* = * + 1 )
0573
MATCHX
*=*+2
0575
TRACE
*=*+1
0576
AUTOIN
I/O ERROR STOP DISABLE.
EXTRA BYTE TO PROTECT AGAINST WORD POKE.
FIRST BYTE * JMP COMMAND ( X-ROUT I NES ) .
FIRST BYTE = JMP COMMAND (G-ROUTINES) .
FIRST BYTE = JMP COMMAND ('SOP').
USE STACK.
VARIABLE TABLE (26 ENTRIES FOR A-Z).
COMMAND TABLE INDEX ( 'CMATCH ' RETURN ARG ) .
(FIRST BYTE IS UNUSED. )
'MLOOP ' SAVE Y REGISTER.
GRAPHICS PEN SELECT.
GRAPHICS MODE FLAG <0=N0T GRAPHICS, ELSE GRAPHICS)
; AUDIO VARIABLE POINTERS.
I/O AUX1 OVERRIDE BYTE.
I/O AUX2 OVERRIDE BYTE.
'QPNBUF'-l USED BY 'SCNDEV'.
DEVICE NAME BUFFER FOR OPEN.
'CHOT' DESTINATION IDENTIFIER & SAVE BYTE.
0 IF MOT LOADING, ELSE LOADING.
'XMATCH' FIELD INDEX VALUES.
RUN-TIME TRACE FLAG (TRACE IF O 0).
AUTO-INPUT FLAG (ACTIVE IF <> 0).
0577
0676
06F1
OOOE
TEXBUF *=*-*-TEXLNG+l
COMBUF *=*+LINLNG+l
GSMODE *=*+ 1
SPARES = $700-*
TEXT EXPRESSION BUFFER.
COMMAND INPUT BUFFER.
GRAPHICS SCREEN MODE.
*** THIS HAD BETTER BE POSITIVE ***
PILOT
H B STEWART
i NOTE ALL SOURCE LINES OF THE FORM SHOWN BELOW ARE REDUNDANT > THE
i LINE IS LEFT THERE TO SHOW THE ASSUMPTION THE LINE WOULD NORMALLY
, BE ASSEMBLED EXCEPT FOR THIS DAMN REQUIREMENT TO SCRUNCH THE CODE *
i *S* LDA #0 i COMMENT.
i NOTE THE USE OF THE TERM * ( BRA ) ' IN A COMMENT INDICATES THAT THE
i PARTICULAR BRANCH INSTRUCTIONS USED WILL ALWAYS BRANCH IN THE
i PARTICULAR CIRCUMSTANCES THE BRANCH IS SUPPOSED TO BE A TWO BYTE
< JUMP
i POWER-UP ROUTINE AND INITIALIZATION
. IF DEBUG
**♦9800
. END IF
IF DEBUG- 1
♦“♦AOOO
. ENDIF
CHECK CONTENT OF *9FFC; MUST NOT BE 00
CARTRIDGE BODY
AOOO
A9
06
INI T
LDA
#EPUTC-IOVBAS
j
ESTABLISH 'CHOT' DESTINATION AS 'E:
A002
8D
70
05
STA
CDEST
A005
AS
08
LDA
WARMST
l
WARM START?
A007
DO
40
BNE
IN 10 1 5
I
YES.
A009
A2
80
LDX
#♦80
I
NO — CLEAR UPPER HALF OF PAGE ZERO.
i *S*
LDA
#0
AOOB
95
00
INI010
STA
0, X
AOOD
E8
I NX
CONTINUE TILL PAGE WRAP POINT.
AOOE
DO
FB
BNE
IN 1010
i
AO 10
A9
4C
LDA
#♦40
i
PUT JMP OP-CODE IN JUMP VECTORS.
AO 12
8D
02
05
STA
X JUMP-*-0
A01 5
8D
05
05
STA
GJUMP+O
AO 18
8D
08
05
STA
SJUMP+O
AO IB
A9
16
LDA
#♦16
i
AUTO-NUMBER SCREEN = DARK YELLOW.
AO ID
85
86
STA
AC0LR2
AUTO-NUMBER LETTERS = BLACK.
i *S*
LDA
#♦00
i
i *s*
STA
AC0LR1
AO IF
A9
17
LDA
#SIGNON
i
GENERATE SIGN-ON MESSAGE.
A021
20
12
BF
JSR
MESSOT
A024
AD
E7
02
LDA
MEMLO
i
ESTABLISH MEMORY LIMITS FOR ALLOCATION
A027
85
88
STA
ACLN
i
ACCEPT BUFFER . . .
A029
85
AE
STA
S1L
l
... & PROGRAM STORAGE AREA.
A02B
AD
E8
02
LDA
MEMLO+1
A02E
85
89
STA
ACLN+ 1
A030
18
CLC
NEXT PAGE.
A031
69
01
ADC
#1
i
A033
85
AF
STA
S1L+1
A035
20
FF
A9
JSR
CLRPRG
A038
AD
E5
02
LDA
MEMHI
PILOT
H. B. STEWART
A03B 85 B4
A030 85 B2
A03F AD E6 02
A042 85 B 5
A044 85 B3
STA S2H
STA S2L
LDA MEMHI+1
STA S2H+1
STA S2L+1
A046 20 3B B8
JSR ZERVAR
ZERO THE NUMERIC VARIABLES.
A049
A04B
A04E
A051
A054
A057
A05A
A9 00
8D 54 05
8D 72 05
8D 75 05
8D 76 05
8D 5D 05
8D 5E 05
INI015
LDA
STA
STA
STA
STA
STA
STA
A05D 85 FD
STA
A05F A9 07
/ LDA
A06 1 8D FI 06
STA
A064 20 2 F B8
JSR
A067 A9 77
LDA
A069 85 8C
STA
A06B A9 05
LDA
A06D 85 8 D
STA
A06F 20 54 B2
JSR
A072 20 7F BA
JSR
#0
ORFLAO
LQADFG
TRACE
AUTOIN
AUX 1
AUX2
MATCHF
i ZERO
GRAPHICS SCREEN FLAG
LOAD FLAG . . .
TRACE FLAG . . .
AUTO-INPUT FLAG . . .
I/O AUX 1 . . .
I/O AUX2 . . .
S< MATCH RESULT.
#SCNMOD
GSMODE
NULACC
#TEXBUF
TELN
#TEXBUF/256
TELN+1
SETUP DEFAULT GRAPHICS SCREEN MODE
D
SET ACCEPT BUFFER TO NULL.
SETUP TEXT EXPRESSION BUFFER POINTER.
REMDEV
GEX050
REMOVE DEVICE ASSIGNMENTS FROM STRING LIST
RECAPTURE GRAPHICS REGION IF NECESSARY.
A075 4C 33 BF
JMP
RDYMES
; GENERATE "READY" MESSAGE & RETURN.
PILOT
H B STEWART
A078
A07A
A07B
A07E
A080
A082
A085
A088
A08B
A08D
A090
A092
A095
A097
A099
A09C
A09F
AOA1
A0A3
AO A 5
A0A7
AOAA
AOAD
AOAF
A0B2
A0B4
A0B7
A0B9
AOBB
AOBE
AOCO
A0C2
A0C4
A0C6
A0C8
AOCB
A2 FF
9A
20 00 AO
* MAIN LOOP FOR
MLE
LDX
TXS
c
JSR
i *** EXTERNAL
PILOT INTERPRETER.
#*FF t
INI T J__
ENTRY POINT *#*
INITIALIZE STACK POINTER
INITIALIZE REST OF ENVIRONMENT
A9 00
85 FF
8D FE 02
8D B6 02
8D 00 05
MLRES LDA #0
STA RUN
STA DSPFLO
STA INVFLG
STA IOEDIS
RESET . . .
. . . RUN FLAG . . .
. . . DISPLAY FLAG . . .
. . . INVERT VIDEO FLAG
. . . *< ERROR STOP DISABLE FLAG.
A9 DC
8D 03
A9 A6
8D 04
85 FE
05
05
LDA
#XTYPE
l
STA
XJUMP+1
LDA
#XTYPE/256
STA
XJUMP+2
STA
EXECF
j
MAKE ' COMMAND * 'T:
CONDITION FLAG » TRUE.
A9 BC
8D 02 D3
20 72 B8
LDA
#C ASSOF
j
STA
PACTL
JSR
AUDCLR
i
CASSETTE MOTOR OFF
CLEAR AUDIO REGISTERS
i *** EXTERNAL ENTRY POINT ***
A9 76
85 80
A9 06
85 81
MLLOAD LDA
#COMBUF
STA
INLN
LDA
#C0MBUF/256
STA
INLN+1
RE-ESTABLISH CONSOLE BUFFER INPUT.
20 C8 BE
20 ID A2
DO 3A
MLOOP
JSR
TONES
JSR
GETCOM
BNE
ML0089
i GENERATE AUDIO,
i GET A COMMAND INPUT.
; ERROR <SKIP BRANCH).
; NOTE :
i
i
THE Y REGISTER IS ASSUMED TO CONTAIN THE INDEX TO I NLN '
THROUGHOUT THIS ROUTINE. ALL CALLED ROUTINES WILL EE
RESPONSIBLE FOR MAINTAINING ITS INTEGRITY.
AD
76
05
LDA
AUTOIN
DO
3A
BNE
ML0100
20
Cl
B7
JSR
SCNLBL
FO
07
BEQ
ML0030
B 1
80
LDA
( INLN), Y
20
7A
B7
JSR
CNUMBR
90
39
BCC
ML01 10
84
82
ML0030 STY
INLN+2
A5
FF
LDA
RUN
DO
OD
BNE
ML0080
i UN-NUMBERED LINE — IMMEDIATE
; AUTO- INPUT MODE?
i YES.
i SCAN OVER LABEL IF PRESENT,
i YES — SAW A VALID LABEL.
; CHECK FOR LINE NUMBER.
; YES — EDIT MODE.
j SAVE INDEX TO SOURCE CODE,
i SEE IF RUN OR IMMEDIATE MODE.
; RUN MODE — NO NEED TO SYNTAX CHECK.
EXECUTION
A2 00
20 A6 A2
DO 1C
LDX #CTABI-CTAB
JSR SYCMND
BNE ML0089
i SETUP FOR IMMEDIATE MODE COMMANDS.
; IMMEDIATE MODE — SYNTAX CHECK CODE,
i ERROR — DON'T EXECUTE THE COMMAND.
AOCD A4 82
LDY
INLN+2
j
RESTORE SOURCE CODE POINTER.
AOCF A2 00
LDX
HCTAB I-CTAB
«
SETUP FOR IMMEDIATE MODE COMMANDS.
AODl FO 13
BEQ
ML 0085
i
*S* (BRA).
A0D3 AD 73 03
ML 0080 LDA
TRACE
j
TRACE EXECUTION?
A0D6 FO OC
BEQ
ML0082
I
NO.
A0D8 A9 18
LDA
#TRCMES
i
YES — PRINT TRACE LINE HEADER.
AODA 20 12 BF
JSR
MESSOT
AODD AO 00
LDY
# I NLN-DT AB
f
PRINT SOURCE STATEMENT.
AODF 20 09 B8
JSR
PSF
A0E2 A4 82
LDY
INLN+2
A0E4 A2 IF
ML0082 LDX
#CTABR-CTAB
i
SETUP FOR RUN MODE COMMANDS.
A0E6 20 AA A2
ML0085 JSR
EXCMND
i
EXECUTE THE COMMAND.
A0E9 DO 30
ML0089 BNE
ML0155
i
RUN-TIME ERROR (SKIP BRANCH POINT).
AOEB 4C A7 AO
JMP
MLOOP
i
GET NEXT COMMAND.
i AUTO-INPUT
MODE — SUPPLY THE LINE NUMBER.
AO EE A3 F9
ML0100 LDA
ALINE
9
SUPPLY THE LINE NUMBER.
AOFO 85 B8
STA
NUMBER
A0F2 A 5 FA
LDA
ALINE+1
A0F4 85 B9
STA
NUMBER+ 1
A0F6 4C FC AO
JMP
ML01 12
•
; NUMBERED LINE INPUT — EDIT
MODE.
A0F9 20 E 8 A4
ML0110 JSR
ATOM
i
CONVERT LINE NUMBER TO BINARY IN 'NUMBER'
AOFC 20 FA B7
ML0112 JSR
SLB
#
SKIP BLANKS BETWEEN LINE # & STATEMENT.
A OFF 84 82
STY
INLN+2
j
SAVE INPUT LINE POINTER.
A101 A2 38
LDX
#NUMBER~DT AB
A103 20 63 AF
JSR
CHKLN
i
CHECK LINE # FOR RANGE.
A106 BO 61
BCS
ML0200
i
OUT OF RANGE.
A108 A9 00
LDA
#0
j
CLEAR USE STACK ON INSERT/DELETE.
A10A 85 90
STA
USTKP
A10C A5 B9
LDA
NUMBER +1
9
SAVE LINE NUMBER . . .
A10E 85 DC
STA
LINENO
i
... IN INVERTED FORM (STRING NAME).
A110 A5 B8
LDA
NUMBER
A112 85 DD
STA
LINENO+1
A114 A4 82
LDY
INLN+2
9
RESTORE INPUT LINE INDEX.
A116 20 Cl B7
JSR
SCNLBL
9
SKIP OVER LABEL IF PRESENT.
A119 FO 19
BEQ
ML0150
i
LABEL FOUND.
AUB B 1 80
LDA
( I NLN ) / Y
9
CHECK FOR NULL STATEMENT.
A11D C9 9B
CMP
#EOL
A11F DO 13
BNE
ML0150
9
NON-NULL — STATEMENT IS TO BE ENTERED.
A121 AD 76 05
LDA
AUTOIN
9
AUTO-INPUT MODE?
A124 FO 08
BEQ
ML0140
9
NO.
A126 20 59 A1
JSR
LVAUTO
9
LEAVE AUTO-INPUT MODE.
H. B. STEWART
PILOT — H. B. STEWART
A 129 A9 81
LDA
A12B 4C E9 A1
JMP
A12E 20 06 A2
ML0140
JSR
A131 4C A7 AO
JMP
A 134 A4 82
ML0150
LDY
A 136 A2 00
LDX
A 138 20 A6 A2
JSR
A13B DO 2F
MLQ155
BNE
A13D AD 50 05
LDA
A 140 C9 IF
CMP
A1 42* BO 04
BCS
A144 A9 83
LDA
A146 DO 24
BNE
A 148 A4 82
ML0160
LDY
A14A 20 F2 A1
JSR
A14D DO ID
BNE
A14F A2 79
LDX
A151 AO 7B
LDY
A153 20 80 B5
JSR
A156 4C A7 AO
JMP
A159 A2 00
LVAUTO
LDX
A15B 8E 76 05
STX
A15E A2 94
LDX
A 160 8E C6 02
i
STX
A163 A2 CA
LDX
A165 8E C 5 02
STX
A 168 60
PUP
RTS
A 169 20 59 A1
ML0200
JSR
#AUTOXT
MLQ985
LDELET
MLOOP
INLN+2
#CTAB I-CTAB
SVCMND
ML0900
CTABXR+1
#CTABR~CTAB
ML0160
#NRCERR
ML0900
INLN+2
LINSRT
ML0900
#ALINE-DTAB
#AINC-DTAB
DADDI
MLOOP
#0
AUTOIN
#$94
C0L0R0+2
#$CA
COLORO+1
LVAUTO
GENERATE MESSAGE AS WE LEAVE.
YES — DELETE NUMBERED LINE.
RESTORE INPUT LINE POINTER.
SETUP FOR RUN MODE COMMANDS.
SYNTAX CHECK THE STATEMENT.
SYNTAX ERROR (SKIP BRANCH POINT).
SEE IF COMMAND FOUND IS IMMEDIATE ONLY.
NO.
YES — ERROR.
(BRA).
RESTORE INPUT LINE POINTER.
INSERT THE NEW LINE.
NO ROOM FOR NEW LINE.
INCREMENT AUTO-INPUT LINE #.
(EVEN IF NOT IN AUTO-INPUT MODE).
GET NEXT COMMAND.
RESET AUTO- INPUT MODE.
RESTORE NORMAL SCREEN COLOR.
*** ANY OLD 'RTS ' WILL DO FOR 'PUP' ***.
LEAVE AUTO-INPUT MODE &< FALL INTO 'PSTOP '
PILOT H B STEWART
♦ SYNTAX /RUN-TIME ERROR PROCESSOR
i ••• EXTERNAL ENTRY POINT ***
i A - ERROR CODE
i Y - INDEX TO ERROR IN STATEMENT.
AI6C
ML 0900
A16C A2 FF
PSTOP
LDX
#*FF
l
RE-INIT STACK POINTER.
A16E 9A
TXS
A16F BE FE
02
STX
DSPFLG
»
SET DISPLAY FLAG
A 1 72 8C 52
05
STY
SAVYR
i
SAVE INDEX TO ERROR.
Al 75 85 B8
STA
NUMBER
#
SAVE ERROR NUMBER
A177 A9 06
LDA
#EPUTC— I OVBAS
i
RE-ESTABLISH 'E ' AS 'CHOT' OUTPUT.
A179 8D 70
05
STA
CDEST
A17C 20 60
B8
JSR
NEWLIN
A 1 7F A5 FF
LDA
RUN
IF IMMEDIATE . . .
A181 05 83
ORA
INLN+3
... & EMPTY INPUT LINE . . .
A 183 FO 6A
BEQ
ML0990
... THEN IGNORE ERROR (BREAK).
A185 A5 38
LDA
NUMBER
A187 C9 81
CMP
#EOPERR
i
SEE IF ERROR IS END OF PROGRAM.
A 189 FO 5E
BEQ
ML0985
#
YES — NO STATEMENT TO PRINT.
A18B A8
TAY
i
(SET CC).
A18C 30 11
BMI
ML0947
i
YES — NO HIGHLIGHTED CHARACTER.
A18E AC 52 05
LDY
SAVYR
9
HIGHLIGHT THE ERROR CHARACTER.
A191 B 1 80
LDA
( I NLN ) > Y
A 193 85 F8
STA
XXXX
9
SAVE FOR LATER RESTORATION.
A195 C9 9B
CMP
#EOL
A197 DO 02
BNE
ML0945
A 199 A9 20
LDA
# '
9
REPLACE EOL WITH BLANK.
A19B 49 80
ML0945
EOR
#$80
9
INVERT COLOR.
A19D 91 80
STA
< I NLN ) / Y
A19F A5 FF
ML0947
LDA
RUN
i
SEE IF RUN OR IMMEDIATE MODE.
A1A1 FO 08
BEQ
ML0950
9
IMMEDIATE.
A1A3 AO 00
LDY
#INLN-DTAB
A1A5 20 09 B8
JSR
PSF
i
RUN — PRINT STORAGE FORMAT.
A1A8 4C B2 A1
JMP
MLQ960
A1AB
ML095O
; -a-S#
LDA
#0
9
*** OR DON'T USE 'I NLN '+2 AS TEMP STORE
A1AB 85 82
STA
INLN+2
A1AD A2 00
LDX
#INLN-DTAB
i
IMMEDIATE — PRINT INPUT LINE.
A1AF 20 53 B 1
JSR
PRTSTG
A1B2 A5 B8
ML096O
LDA
NUMBER
9
WAS THERE A HIGHLIGHTED CHARACTER?
A1B4 30 0 E
BMI
ML0963
9
NO.
A1B6 AC 52 05
LDY
SAVYR
9
RESTORE ORIGINAL CHARACTER.
A1B9 A5 F8
LDA
XXXX
A1BB 91 80
STA
(INLN), Y
PILOT
H. B.
STEWART
PILOT
H B STEWART
A1BD C9 9B
CMP
#EQL
i WAS IT THE EOL?
A1BF DO 03
BNE
ML0963
i NO.
A tC 1 20 6F AF
JSR
CHOT
i YES — DO IT NOW.
A1C4 A9 08
ML0963
LDA
#8
i PREFIX MESSAGE WITH '***'.
A1C6 20 12 BF
JSR
MESSOT
A1C9 A5 B8
LDA
NUMBER
A1CB C9 86
CMP
#IOERR
i I/O ERROR?
A1CD DO OA
BNE
ML0981
1 NO.
A1CF A4 E4
LDY
IOSTAT
i YES — BREAK?
A1D1 CO 80
CPY
#128
A1D3 DO 04
BNE
ML0981
i NO.
A1D5 A9 87
LDA
#ABTERR
; YES — CHANGE ERROR CODE.
A1D7 85 B8
STA
NUMBER
A1D9 20 12 BF
ML0981
JSR
MESSOT
; GENERATE ERROR MESSAGE.
A1DC A5 B8
LDA
NUMBER
AIDE C9 86
CMP
#IOERR
i I/O ERROR?
A1E0 DO 05
BNE
ML0982
; NO.
A1E2 A2 64
LDX
#IOSTAT-DTAB
; YES — PRINT ERROR STATUS.
A1E4 20 OB B7
JSR
DECASC
A1E7 A9 08
ML0982
LDA
#8
; APPEND '***' TO END OF MESSAGE
; *** EXTERNAL
ENTRY POINT FROM 'MLOOP' **•*
A1E9 20 12 BF
ML0985
JSR
MESSOT
A1EC 20 60 B8
JSR
NEWLIN
A1EF 4C 7E AO
ML0990 JMP
MLRES
i GET NEXT COMMAND.
PILOT
M B STEWART
i LINE INSERT AND DELETE ROUTINES
«
, LIN8RT — INSERT NUMBERED LINE TO STATEMENT LIST
CALLING SEQUENCE:
'LINENO' - LINE • (BINARY)
' INLN ' POINTS TO STATEMENT TO INSERT
Y - INDEX TO FIRST BYTE OF STORAGE STATEMENT
i JSR
LINSRT
i BNE
NO ROOM
IN MEMORY
OR OTHER PROBLEM
A1F2
20
OC A2
I
LINSRT JSR
NUMNAM
\
SETUP
'LINENO' AS STRING NAME.
AIF9
84
C4
STY
DP >2
J
SETUP
STRING DATA POINTER.
AIF7
AS
80
LDA
INLN
A1F9
89
C2
STA
DP
AIFB
A9
81
LDA
INLN+1
A1FD
89
C3
STA
DP+1
A IFF
A9
83
LDA
INLN+3
A201
89
C9
STA
DP **-3
A203
4C
08 B2
f JMP
SINSRT
*
INSERT
LINE & RETURN WITH CC SET.
i LDELET — NUMBERED LINE DELETE FROM STATEMENT LIST
; CALLING SEQUENCE:
i
i
i
'LINENO' = LINE #
JSR
LDELET
i
i
BNE
LINE NOT 1
A206
20
OC
A2
LDELET
JSR
NUMNAM
A209
4C
9F
B2
JMP
SDELET
#
; NUMNAM
—
SETUP 'LINENO
; SETUP 'LINENO ' AS STRING NAME,
i DELETE LINE Z< RETURN WITH CC SET.
A20C
A9
DC
NUMNAM LDA
#L INENO
A20E
85
3E
STA
NP
A210
A9
00
LDA
#L JNENO/256
A212
85
BF
STA
NP + 1
; *S* LDA
#0
A214
85
CO
STA
NP-+-2
A216
A9
02
LDA
#2
A218
85
Cl
STA
NP+3
A21 A
4C
92 B7
JMP
STMLST
; SETUP
TO ACCESS STATEMENT
PILOT
H. B STEWART
PILOT
H. B STEWART
GETCOM — GET A COMMAND LINE FOR THE MAIN LOOP
CALLING SEQUENCE:
'LOADFG' = 0 IF NOT LOADING FROM DEVICE, ELSE LOADING.
'RUN' = 0 IF IMMEDIATE MODE, ELSE RUN MODE.
'NXTLN ' POINTS TO NEXT RUN MODE LINE.
JSR GETCOM
BNE ERROR (A = ERROR NUMBER)
' INLN ' POINTS TO NEW COMMAND LINE.
Y = INDEX TO START OF STATEMENT.
'NXTLN' POINTS TO NEXT
A21D AD 72
05
GETCOM
LDA
LOADFG
A220 DO 32
BNE
GEC200
A222 A5 FF
LDA
RUN
A224 FO 24
BEQ
GEC100
A226 20 46
B8
GEC010
JSR
ABRTCK
A229 A2 00
LDX
#1 NLN-DTAB
A22B AO 04
LDY
#NXTLN--DTAB
A22D 20 CF
B3
JSR
DMOVI
A230 AO 00
LDY
#0
A232 B 1 80
LDA
( INLN), Y
A234 85 83
STA
INLN+3
A236 AO 30
LDY
#S1H-DTAB
A238 20 63
B5
JSR
DCMPI
A23B DO 03
BNE
GEC020
A23D A9 81
LDA
#EOPERR
A23F 60
RTS
A240 A2 04
GEC020
LDX
#NXTLN--DTAB
A242 20 10
B4
JSR
SNXTI
A245 AO 06
LDY
#6
A247 A9 00
LDA
#0
A249 60
RTS
; GET A
LINE
FROM THE CONSOLE
A24A
GEC100
; *S*
LDA
#0
A24A 85 83
STA
INLN+3
A24C A2 00
LDX
# I NLN-DTAB
A24E 20 9E AF
JSR
GETLIN
A251 AO 00
LDY
#0
A253 60
RTS
; GET DATA FROM DEVICE ASSIGNED
GEC200 STX
LDA
RUN MODE LINE.
; LOADING FROM DEVICE?
; YES.
; RUN MODE?
i NO — IMMEDIATE.
; YES — CHECK FOR OPERATOR ABORT,
i GET NEXT STATEMENT ADDRESS.
; GET & SAVE LINE END INDEX.
; END OF PROGRAM?
; NO — KEEP TRUCKIN'.
; RETURN WITH INDICATOR.
; POINT TO NEXT LINE.
i SET INDEX TO START OF STATEMENT.
; SET CC FOR RETURN.
; CLEAR LINE LENGTH FOR "BREAK".
; GET AN INPUT LINE FROM CONSOLE,
i SET INDEX TO START OF STATEMENT (CC TOO).
TO IOCB 3.
A254 86 A1
A256 A5 80
TEMP
INLN
; SAVE REGISTERS.
; SETUP BUFFER ADDRESS.
PILOT
H B STEWART
A298 80 74 03
STA
IQCB3+ ICBAL
A29B A9 81
LDA
INLN+1
A29D 80 79 03
STA
I0CB3+ICBAH
A260 A9 09
LDA
#GETR
i
GET RECORD COMMAND.
A262 80 72 03
STA
I0CB3+ICC0M
A269 A9 79
LDA
4LINLN0-1
9
SETUP MAXIMUM LINE LENGTH.
A267 80 78 03
STA
I0CB3+ICBLL
A26A A9 00
LDA
#LINLNG-l/256
A26C 80 79 03
STA
I0CB3+ICBLH
A26F A2 30
LDX
#1 0CB3
i
GET RECORD.
A271 20 56 E4
J SR
CIO
A274 AD 78 03
LDA
I0CB3+ICBLL
i
PUT START/END INDICES IN POINTER.
A277 85 83
STA
INLN+3
A279 A9 00
LDA
#0
A27B 85 82
STA
INLN+2
A27D CO 00
CPY
#0
9
ERROR?
A27F 10 21
BPL
GEC250
9
NO.
; *S*
LDA
#0
9
THAT OR END-OF-FILE.
A281 80 72 05
STA
LOADFG
i
STOP LOADING IN EITHER CASE.
END OF FILE?
A284 CO 88
CPY
#$88
9
A2S6 DO 17
BNE
GEC220
9
NO.
A288 20 FD BO
JSR
DCLOSE
i
YES — CLOSE DEVICE.
A28B A 5 FF
LDA
RUN
9
IS THE USER PROGRAM RUNNING?
A28D FO OA
BEQ
GEC210
9
NO — IMMEDIATE LOAD OR LOAD ERROR.
A28F A5 AE
LDA
S1L
9
YES — SETUP TO RUN PROGRAM LOADED.
A291 85 84
STA
NXTLN
A293 A5 AF
LDA
S 1 L+ 1
A295 85 85
STA
NXTLN+1
A297 DO 8D
BNE
GEC010
9
(BRA).
A299 20 33 BF
GEC210
JSR
RDYMES
9
GENERATE •'READY** MESSAGE.
A29C 4C 7E AO
JMP
MLRES
9
GRACEFUL TERMINATION OF LOAD.
A29F 4C E6 BO
0EC220
JMP
D0P005
9
ABORT LOAD OPERATION.
A2A2 A6 A1
GEC250
LDX
TEMP
9
RESTORE REGISTER.
A2A4 A8
TAY
9
SETUP INDEX TO START OF STATEMENT (=0)
A2A 5 60
RTS
9
RETURN WITH CC SET.
u n
CTCI.IADT
PILOT
H B STEWART
A2A6
A2A8
A2AA
A2AC
A2AE
A2B 1
A2B4
A2B7
A2B9
A2BB
A2BE
A2C0
A2C 1
A2C3
A2C5
A2C6
A2C8
A2CA
A2CC
A2CE
A2D1
A9 00
FO 02
SYCMND — SYNTAX CHECK THE COMMAND
t CALLING SEQUENCE:
X *= INDEX TO COMMAND TABLE START
' INLN ' POINTS TO THE STATEMENT
Y * INDEX TO START OF STATEMENT
SYCMND
JSR
BNE
SYCMND
SYNTAX ERROR (A
'CTABXR '+1
ERROR CODE)
INDEX TO COMMAND TABLE ENTRY FOR MATCH.
LDA
BEQ
#0
EXC010
i RESET
i (BRA).
i EXCMND — EXECUTE THE COMMAND
CALLING SEQUENCE:
X = INDEX TO COMMAND TABLE START.
' INLN ' POINTS TO THE STATEMENT
Y = INDEX TO START OF STATEMENT
JSR
BNE
EXCMND
SYNTAX OR RUN-TIME ERROR (A = ERROR CODE)
'CTABXR ' + 1 = INDEX TO COMMAND TABLE ENTRY FOR MATCH.
A9
FF
EXCMND
LDA
85
92
EXC010
STA
20
Cl
B7
JSR
20
FA
B7
JSR
20
EO
B7
JSR
DO
08
BNE
A9
20
EXC015
LDA
8D
50
05
STA
A9
00
LDA
60
RTS
C9
3A
EXC020
CMP
DO
ID
BNE
C8
INY
A5
92
LDA
FO
EF
BEQ
A5
FF
LDA
FO
2C
BEQ
AD
04
05
LDA
C9
A7
CMP
#*FF
EXEC
SCNLBL
SLB
CHKTRM
EXC020
#CTABR+1~CTAB
CTABXR+1
#0
EXC040
EXEC
EXC015
RUN
EXC050
XJUMP+2
«XRFM+1 /256
j SET . . .
; ... EXECUTE FLAG.
; SCAN PAST LABEL IF PRESENT
NULL LINE?
NO.
yijrcj DONE
MAKE IT LOOK LIKE RUN-TIME COMMAND.
SET CC FOR EXIT.
RETURN WITH CC SET.
COMMAND CONTINUATION?
NO.
YES.
EXECUTE MODE?
NO — ALL DONE.
; yES E -- A u!e EX |xKF' & 'XJUMP' FROM PRIOR COMM
. N0 — CHECK FOR 'T ' * 'Y'» 'N' OR R'-
PILOT
H B STEWART
m
*0
p
A2D3 90 25
BCC
EXC05O
1
A2D3 DO 07
BNE
EXC030
i
A2D7 AD 03 05
LDA
X JUMP* 1
$
A2DA C9 5E
CMP
9XREM+1
A2DC 90 1C
BCC
EXC050
1
A2DE 88
EXC030
DEY
A2DF A9 02
LDA
#1 VCERR
J
A2EI 60
RTS
A2E2 20 10 A3
EXC040
J SR
CMATCH
j
A2E5 DO 28
BNE
EXC900
j
A2E7 BD 2F A4
LDA
CDTAB* X
j
A2EA 8D 03 05
STA
X JUMP-*- 1
A2ED BD 30 A4
LDA
CDTAB-*- 1 1 X
A2F0 8D 04 05
STA
X JUMP -*-2
A2F3 20 9D A4
JSR
COND
i
A2F6 A5 92
LDA
EXEC
i
A2F8 FO 04
BEQ
EXC070
i
A2FA A 5 FE
EXC050
LDA
EXECF
j
A2FC FO 11
BEQ
EXC900
#
A2FE A 5 92
EXC070
LDA
EXEC
i
A300 20 02 05
JSR
X JUMP
9
A303 DO OA
BNE
EXC900
»
A305 20 FA B7
JSR
SLB
9
A30S 20 EO B7
JSR
CHKTRM
9
A30B FO 02
BEQ
EXC900
9
A30D A9 02
LDA
#JNKERR
9
A30F 60
EXC900
RTS
9
PTI HT U R CTPUART
O K
I N V AL I D
NOT SURE — CHECK FURTHER.
O. K
INVALID CONTINUATION
FIND COMMAND
INVALID.
MOVE ADDRESS TO JUMP INSTRUCTION
PROCESS CONDITION IF PRESENT.
EXECUTE MODE?
NO — SYNTAX SCAN ONLY.
EXECUTE COMMAND?
NO — NORMAL EXIT.
SET CC FOR X-ROUTINES.
YES — EXECUTE (OR SCAN).
ERROR — RETURN WITH CC SET.
SKIP ANY BLANKS.
STATEMENT TERMINATOR?
YES — O. K.
JUNK — ERROR.
RETURN WITH CC SET.
PILOT
H. B. STEWART
CMATCH — COMMAND MATCH ROUTINE
CALLING SEQUENCE:
X = INDEX TO CTAB TO START SCAN.
' I NLN ' POINTS TO SOURCE STATEMENT.
Y = INDEX TO START OF COMMAND NAME.
JSR CMATCH
BNE NO MATCH IN TABLE (A = ERROR CODE)
X = VALUE OF 'CTAB ' DATA BYTE FOR ENTRY (AND *7F).
Y = INDEX TO START OF FIELD AFTER COMMAND NAME.
'CTABXR'+l = INDEX TO COMMAND TABLE ENTRY FOR MATCH.
NOTE: NAME MATCH MUST BE EXACT FOR THE REST OF THE
STATEMENT TO BE PROCESSED CORRECTLY. FOR EXAMPLE:
"TYPEN: " WILL BE SCANNED AS TY<JUNK>: , NOT
TCJUNtON: .
A3 10
20
FA
B7
CMATCH
JSR
SLB
9
SKIP LEADING BLANKS.
i
EXTERNAL
ENTRY POINT FROM
/
ATOM' ***
A31 3
84
A1
CMAT2
STY
TEMP
i
SAVE INDEX.
A31 5
88
DEY
#
(PRE-DECREMENT).
A316
C8
CMA005
INY
A31 7
BD
3A
A3
CMA010
LDA
CTAB, X
i
SEE IF END OF NAME IN TABLE.
A31 A
30
15
BMI
CMA070
i
YES — MATCH FOUND.
A3 1C
E8
I NX
A3 ID
D 1
80
CMP
( INLN > i Y
f
MATCH SO FAR?
A3 IF
FO
F5
BEQ
CMA005
#
YES — CONTINUE COMPARISON.
A321
E8
CMA020
I NX
i
SCAN TO END OF NAME ENTRY.
A322
BD
39
A3
LDA
CTAB-1, X
A325
10
FA
BPL
CMA020
A327
A4
A1
LDY
TEMP
i
RESTORE SOURCE INDEX.
A329
BD
3A
A3
LDA
CTAB, X
9
CHECK FOR END OF TABLE.
A32C
DO
E9
BNE
CM AO 10
i
NO — KEEP CHECKING.
A32E
A9
02
LDA
#1 VCERR
9
TABLE END — INVALID COMMAND.
A330
60
... .
RTS
— * — — — - — -- -
A331
8E
50
05
CMA070
STX
CTABXR+1
9
SAVE INDEX FOR CALLER.
A334
29
7F
AND
#$7F
9
REMOVE SIGN BIT FROM TABLE BYTE.
A336
AA
TAX
9
PUT IN X AS ADVERTISED.
A337
A9
00
LDA
#0
9
SET CC FOR EXIT.
A339
60
RTS
PILOT
H. B STEWART
COMMAND TABLE
CONSISTS OF N ENTRIES, EACH OF THE FOLLOWING FORMAT:
. BYTE "CCOMMAND NAME>" , $80+INDEX TO DATA TABLE
THE TOTAL NUMBER OF BYTES IN THE TABLE MAY NOT EXCEED 256.
ORDER OF ENTRIES IS IMPORTANT, THE FIRST FOUND MATCH IS ACCEPTED
THE BEST FIT.
0080
A33A
SB=*80
CTAB=*
i SIGN BIT.
i COMMAND TABLE BASE ADDRESS.
A33A
CTABI=*
i IMMEDIATE MODE ONLY COMMANDS.
A33A 4C 49 53
A33D 54 80
. BYTE
"LIST", SB+CDLIST-CDTAB
j LIST STORED PROGRAM.
A33F 52 55 4E
A342 84
. BYTE
"RUN", SB+CDRUN-CDTAB
,• RUN STORED PROGRAM.
A343 44 4F 53
A346 86
. BYTE
"DOS", SB+CDDOS— CDTAB
; GO TO DOS UTILITY.
A347 53 41 56
A34A 45 8A
. BYTE
"SAVE", SB+CDSAVE-CDTAB
; SAVE STORED PROGRAM.
A34C 4E 45 57
A34F B6
. BYTE
"NEW", SB +CDNEW— CDTAB
; CLEAR PROGRAM St VARS.
A360 41 55 54
A353 4F 8C
. BYTE
"AUTO", SB +CD AUTO— CDTAB
; AUTO-INPUT.
A355 52 45 4E
A358 8E
. BYTE
"REN", SB+CDREN-CDTAB
i RENUMEER PROGRAM.
A359
CTABR=*
; IMMEDIATE OR RUN MODE
COMMANDS.
A359 44 55 4D
. BYTE
"DUMP", SB+CDDUMP-CDTAB
; DUMP.
A35C 50 82
A35E 4C 4F 41
A361 44 88
. BYTE
"LOAD", SB+CDL.OAD-CDTAB
; LOAD.
A363 54 52 41
BYTE
"TRACE", SB +CDTRC -CDTAB
; TRACE.
A366 43 45 92
A369 56 4E 45
A36C 57 B8
BYTE
"VNEW", SB+CDNEWV-CDTAB
; VNEW.
A36E
CTABC=*
; PRIOR COMMANDS DON 'T
REQUIRE A r : '.
A36E 43 41 4C
A37 1 4C 90
BYTE-
"CALL", SB+CDCAL-CDTAB
; CALL.
A373 54 41 50
A376 45 94
•
BYTE
"TAPE", SB+CDCASS-CDTAB
; CASSETTE ON/OFF.
PILOT
H. B. STEWART
0
. 15 Y I fc.
HI
A376 45 94
*
PILOT —
H. B.
STEWART
A378
54
53
59
A37B
4E
43
96
A37E
52
45
41
A381
44
BA
A3S3
57
52
49
A386
54
45
BC
A389
43
4C
4F
A38C
53
45
BE
A38F
54
98
A391
41
9A
A393
43
9C
A395
55
9E
A397
45
AO
A399
4A
4D
A2
A39C
4A
A4
A39E
47
52
A6
A3A1
4D
53
A8
A3A4
4D
AA
A3A6
53
4F
AC
A3A9
52
AE
A3AB
50
41
BO
A3AE
59
B2
A3B0
4E
B4
A3B2
50
4F
53
A3B5
CO
A3B6
00
A3B7
OPTAB=
A3B7
2B
C2
A3B9
2D
C4
A3BB
2F
C6
A3BD
2A
C8
*
A3BF
3C
3E
CA
A3C2
3E
3D
CC
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
. BYTE
"TSYNC" , SB+CDSYNC-CDTAB ; CASSETTE SYNC.
"READ" , SB+CDIN-CDTAB
; READ RECORD.
"WRITE", SB+CDOUT— CDT AB
; WRITE RECORD.
"CLOSE", SB+CDDONE-CDTAB
i CLOSE FILE.
"T", SB+CDT-CDTAB
; TYPE.
"A", SB+CDA-CDTAB
; ACCEPT.
"C", SB +C DC— CDT AB
i COMPUTE.
"U", SB+CDU-CDTAB
i USE (RUN ONLY).
"E", SB+CDE-CDTAB
; END (RUN ONLY).
"JM", SB+CDJM-CDTAB
; JUMP ON MATCH (RUN ONLY).
"J", SB+CDJ-CDTAB
; JUMP (RUN ONLY).
"GR", SB+CDG-CDTAB
; GRAPHICS.
"MS", SB+CDMS-CDTAB
i MATCH (PRODUCING) STRING.
"M", SB+CDM-CDT AB
i MATCH.
"SO", SB+CDS-CDTAB
; SOUNDS.
"R", SB+CDR-CDTAB
i REMARK.
"PA", SB+CDW-CDTAB
; PAUSE.
"Y", SB+CDY-CDT AB
; TYPE IF YES.
"N", SB+CDN-CDTAB
; TYPE IF NO.
"POS", SB +C DP OS— CDTAB
; POSITION.
0 ; END
OF TABLE.
; NUMERIC /RELATIONAL OPERATORS.
SB+CDPLUS-CDTAB
SB +CDSUB— CDTAB
"/", SB+CDDI V-CDTAB
SB+CDMUL-CDTAB
"<>", SB+CDNE-CDTAB
'•>=", SB+CDGE-CDTAB
PILOT
H • STEWART
A3C3 3C 30 CE
BYTE SB+CDLE-CDTAB
A3C0 30 00
BYTE "»“« SB + CDEQ-CDTAB
A3CA 3E 04
BYTE “>“# SB+CDCT-CDTAB
A3CC 3C 02
BYTE "<*S SB+CDLT-CDTAB
A3CE 3C D6
.BYTE “\*S SB+CDMOD-CDTAB
A 300 00
BYTE 0 i END OF TABLE
A301
0TAB-* i GRAPHICS SUB-COMMAND TABLE
A301 44 32 41
A3D4 37 34 4F
A3D7 D8
.BYTE "DRAWTO'S SB+CDDRWT-CDTAB
A3D8 44 32 41
A3DB 37 DA
BYTE "DRAW'S SB+CDDRW— CDTAB
A 3DD 34 33 32
A3E0 4 E 34 4F
A3E3 DC
. BYTE "TURNTO'S SB+CDTRNT-CDTAB
A3E4 34 33 32
A3E7 4E DE
. BYTE "TURN'S SB+CDTRN-CDTAB
A3E9 47 4F 54
A3EC 4F EO
. BYTE "GOTO", SB+CDGOTO-CDTAB
A3EE 46 49 4C
A3F1 4C 54 4F
A3F4 E4
/ .BYTE "FILLTO'S SB+CDFILT-CDTAB
A3FS 46 49 4C
A3F8 4C E6
.BYTE "FILL'S SB+CDFIL-CDTAB
A3FA 47 4F E2
__--(TbY TE "GO'S SB+CDGO-CDTAB \
A3FD 50 45 4E
A400 E8
.BYTE "PEN'S SB+CDPEN-CDTAB
A401 43 4C 45
A404 41 52 EA
• BYTE "CLEAR", SB+CDCLR-CDTAB
A407 51 55 49
A40A 54 EC
. BYTE "QUIT'S SB+CDEX IT-CDTAB
A40C 00
• BYTE 0 ; END OF TABLE.
A40D
PCTAB-* ; PEN COLOR TABLE.
A40D 52 45 44
A410 81
. BYTE "RED'S SB + 1
A41 1 59 45 4C
A414 4C 4F 57
A417 82
. BYTE "YELLOW'S SB+2
ILOT
H. B STEWART
A414 4C 4 F 57
A417 82
PILOT — H B STEWART
A418
42
4C
55
. BYTE
"BLUE", SB+3
A41B
45
83
A41D
45
52
41
. BYTE
"ERASE ", SB+O
A420
53
45
80
A423
55
50
84
. BYTE
"UP", SB+PCUP
A426
00
. BYTE
0
i END
OF
TABLE.
A427
CCTAB=*
i CASSETTE/TRACE
A427
4F
4E
B4
. BYTE
"ON", CASSON
A42A
4F
46
46
. BYTE
"OFF", CASSOF
A42D
BC
A42E
00
. BYTE
0
i END
OF
TABLE.
OOF 5
TABLEN=*-CTAB
i MUST NOT EXCEED 0100 HEX.
> COMMAND DATA TABLE
i
i CONSISTS OF N ENTRIES OF ANY LENGTH, THE INDICES TO THIS TABLE ARE
i CONTAINED IN 'CTAB THE TOTAL NUMBER OF BYTES IN THE TABLE MAY NOT
; EXCEED 128.
A42F
CDTAB=
■*
A42F 26 AE
CDLIST
. WORD
A431 D5 AA
CDDUMP
. WORD
A433 CO A7
CDRUN
. WORD
A435 B8 A7
CDDOS
. WORD
A437 05 AE
CDLOAD
. WORD
A439 D4 AD
CDSAVE
. WORD
A43B Cl AE
CDAUTO
. WORD
A43D IF AF
CDREN
. WORD
A43F OC AA
CDCAL
. WORD
A441 CO AD
CDTRC
. WORD
A443 91 AD
CDCASS
. WORD
A445 A2 AD
CDSYNC
. WORD
A447 DC A6
CDT
. WORD
A449 E3 A 7
CDA
. WORD
A44B 37 AB
CDC
. WORD
A44D 25 AA
CDU
. WORD
A44F 92 A7
CDE
. WORD
A451 A7 AA
CDJM
. WORD
A453 48 AA
CDJ
. WORD
A455 FE AB
CDG
. WORD
A457 51 A9
•CDMS
. WORD
A459 B6 A8
CD M
. WORD
A45B 9B AC
CDS
. WORD
A45D 5D A7
CDR
. WORD
A45F 6D AD
CDW
. WORD
A461 4F A7
CDY
. WORD
A463 57 A7
CDN
. WORD
; COMMAND DATA TABLE BASE ADDRESS.
XL 1ST
XDUMP
XRUN
XDOS
XLOAD
XSAVE
XAUTO
XREN
XCALL
XTRACE
XCASS
XCSYNC
XTYPE
XACCPT
XCMPUT
XUSE
XEND
XJMPM
XJMP
XGRAPH
XMWSP
XMATCH
XSOUND
XREM
XWAIT
XTYPE2
XTYPE3
PILOT
H B STEWART
A465 F8 A9
CDNEW
WORD
XNEW
A467 BA A9
CDNEWV
. WORD
XNEWV
A469 DE AC
COIN
WORD
XIN
A46B 29 AD
CDOUT
. WORD
XOUT
A46D 5C AD
CDDONE
. WORD
XDONE
A46F 60 A7
CDPOS
. WORD
XPOS
A471 80 B5
CDPLUS
. WORD
DADD I
A473 90 85
CDSUB
. WORD
DSUDI
A475 D5 85
CDDIV
. WORD
DDIVI
A477 A2 35
CDMUL
. WORD
DMULI
A479 6C 86
CDNE
. WORD
DNETI
A47B 83 B6
CDGE
WORD
DGETI
A47D 8A B6
CDLE
WORD
DLETI
A47F 65 B6
CDEQ
. WORD
DEGTI
A481 7C B6
CDLT
. WORD
DLTTI
A483 73 B6
CDGT
WORD
DGTTI
A485 33 B6
CDMOD
. WORD
DMODI
A487
Cl
B9
CDDRWT
. WORD
GDRWTQ
A489
OA
BA
CDDRW
. WORD
GDRW
A48B
F4
B9
CDTRNT
. WORD
GTRNTO
A48D
36
BA
CDTRN
. WORD
GTRN
A48F
C5
B9
CDGOTO
. WORD
GGOTO
A491
OE
BA
CDGO
. WORD
GGO
A493
BD
B9
CDFILT
. WORD
GFILTO
A495
06
BA
CDFIL
. WORD
GFIL
A497
4B
BA
CDPEN
. WORD
GPEN
A499
9A
BA
CDCLR
. WORD
GCLEAR
A49B
5D
BA
CDEXIT
. WORD
GEXIT
006E
TABLEN = *- CDTAB
THIS MUST NOT EXCEED 0080 HEX.
PILOT — H. B. STEWART
PILOT
H. B. STEWART
COND — CONDITIONAL EXECUTION PROCESSOR
CALLING SEQUENCE:
' INLN ' POINTS TO STATEMENT TO BE PROCESSED
Y = INDEX TO START OF CONDITION.
'MATCHF 7 = 0 (FALSE) OR *FF (TRUE)
RESULT OF PRIOR 7 M 7 COMMAND.
JSR
COND
; NOTE:
GOES
TO 7 P STOP 7 Ot
A49D
A9
FF
COND
LDA
#$FF
A49F
85
FE
STA
EXECF
A4A1
20
FA
B7
JSR
SLB
A4A4
C9
59
CMP
# 7 Y
A4A6
DO
05
BNE
CND010
A4AS
A5
FD
LDA
MATCHF
A4AA
4C
B7
A4
JMP
CND015
A4AD
C9
4E
CND010
CMP
#'N
A4AF
DO
OC
BNE
CND030
A4B 1
A5
FD
LDA
MATCHF
A4B3
FO
04
*
BEQ
CND017
A4B5
A9
00
LDA
#0
A4B7
85
FE
CND015
STA
EXECF
A4B9
C8
CND017
INY
A4BA
20
FA
B7
JSR
SLB
A4BD
C9
28
CND030
CMP
#' (
A4BF
DO
14
BNE
CND050
A4C 1
20
92
B8
JSR
EXP
A4C4
A5
94
LDA
EXPSTK+1
A4C6
30
06
BMI
CND032
A4C8
DO
08
BNE
CND040
A4CA
A5
93
LDA
EXPSTK
A4CC
DO
04
BNE
CND040
A4CE
A9
00
CND032
LDA
#0
A4D0
85
FE
STA
EXECF
A4D2
20
FA
B7
CND040
JSR
SLB
A4D5
C9
3A
CND050
CMP
#':
A4D7
DO
02
BNE
CND080
A4D9
C8
INY
Y = INDEX TO 7 IN STATEMENT + 1.
'EXECF 7 = O IF STATEMENT IS NOT TO BE EXECUTED.
PRESET EXECUTE FLAG.
GET FIRST CHAR OF CONDITION FIELD.
CHECK FOR 7 Y 7 OR 7 N 7 FIRST.
Y 7
IF 'MATCHF 7 IS TRUE, RESULT IS TRUE.
NOT 7 Y 7 OR 7 N 7 .
/ N / — jF 'MATCHF 7 IS FALSE, RESULT IS TRUE
; GET NEXT NON-BLANK CHARACTER.
; SEE IF ARITHMETIC EXPRESSION.
; NO — ALL DONE.
; EVALUATE EXPRESSION IN PARENS.
; SEE IF RESULT > ZERO.
; NO — NEGATIVE.
. YES — POSITIVE & NON-ZERO.
; NOT SURE — TEST LSB.
; POSITIVE & NON-ZERO.
; NO — CONDITION FALSE.
i GET NEXT NON-BLANK CHARACTER.
; COLON?
; NO.
; SKIP OVER
/ . /
PILOT
H 8 STEWART
■
A4DA 60
CND070 RTS
A4DB AD SO OS
A4DE C9 34
A4E0 90 F8
CNDOQO
LDA
CMP
BCC
CTABXR+l
#CTABC-CTAB
CND070
i * : * REQUIRED FOR THIS COMMAND?
i NO.
A4E2 88
A4E3 A9 02
A4ES 4C 6C A 1
DEY
LDA
JMP
4CNDERR
PSTOP
* YES — ERROR.
PILOT
H. B
STEWART
A4E8 20 FA B7
A4EB 20 EO B7
A4EE FO 33
A4F0 C9 23
A4F2 FO 34
A4F4 C9 40
A4F6 FO 57
A4F8 C9 24
A4FA DO 03
A4FC 4C 8B A5
A4FF C9 25
A501 DO 03
A503 4C F2 A5
A506 20 7 A B7
A509 BO 03
A50B 4C D4 A5
A50E 20 88 B7
A51 1 BO 03
A513 4C DD A5
A516 A2 7D
A518 20 13 A3
A51B DO 03
A51D 4C El A5
A520 A9 02
A522 60
; ATOM — FIND, IDENTIFY & EVALUATE THE NEXT ATOM IN THE STATEMENT LINE.
I CALLING SEQUENCE:
' INLN ' POINTS TO THE STATEMENT LINE,
i Y = INDEX TO END OF PRIOR ATOM + 1.
JSR ATOM
BNE SYNTAX ERROR
A = ATOM IDENTIFIER CODE
Y = INDEX TO END OF ATOM + 1 < OR BEGINNING OF ATOM FOR TEXT TYPE)
'NUMBER' = VALUE OF NUMERIC CONSTANT OR NUMERIC VARIABLE.
'POINT' = ADDRESS OF NUMERIC VARIABLE OR OPERATOR ROUTINE.
I
'NP
' POINTS TO STRING
VARIABLE NAME.
#
'DP
' POINTS TO STRING
VARIABLE VALUE (IF DEFINED).
i
ATOM
JSR
SLB
i
SKIP LEADING BLANKS, IF PRESENT.
INTERNAL RE-ENTRY POINT
AT0M2
JSR
CHKTRM
#
NULL ATOM (STATEMENT TERMINATOR)?
BEQ
ATM100
>
YES.
CMP
#'#
#
NUMERIC VARIABLE?
BEQ
ATM200
i
YES.
CMP
# '@
i
POINTER?
BEQ
ATM250
i
YES.
CMP
# '*
#
STRING VARIABLE?
BNE
ATM003
i
NO.
JMP
ATM300
i
YES.
ATM003
CMP
# '7.
#
JOYSTICK/PADDLE/LIGHTPEN?
BNE
ATM005
#
NO.
JMP
ATM700
9
YES.
ATM005
JSR
CNUMBR
9
NUMERIC LITERAL?
BCS
ATM010
9
NO
JMP
ATM400
9
YES.
ATM010
JSR
CLETTR
9
CONTEXT DEPENDENT TEXT?
BCS
ATM020
9
NO.
JMP
ATM500
9
YES.
ATM020
LDX
JSR
#OPTAB-CTAB
CMAT2
9
SPECIAL OPERATOR?
BNE
ATM099
9
NO.
JMP
ATM600
9
YES.
ATM099
LDA
RTS
#ATMERR
9
9
NONE OF THE ABOVE — ERROR.
RETURN WITH CC SET.
PILOT
M B STEWART
A923 A9 01
A 929 4C 07 A6
i NULL ATOM — <EOL>
ATMIOO LDA
•NULL
ATMRET
» NUMERIC VARIABLE
•<LETTER>
A928 C8
ATM200 I NY
A929 B 1 80
LDA
( INLN). Y
-
GET VARIABLE NAME
A92B 20 88 B7
JSR
CLETTR
1
IS IT A PROPER LETTER?
A92E BO FO
BCS
ATM099
4
NO — SYNTAX ERROR.
A930 38
SEC
1
(CLEAR BORROW)
A931 E9 41
SBC
• ' A
4
RELATIVIZE
A933 OA
ASL
A
1
X2.
A 934 AA
TAX
i
INDEX TO 'VARTAB *
A939 18
CLC
1
CALCULATE ADDRESS OF VAR
A 936 69 IB
ADC
•VARTAB
A938 89 B6
STA
POINT
A93A A9 09
LDA
•VAR TAB/ 256
A93C 69 00
ADC
•0
A93E 85 B7
STA
POINT+1
A940 C8
INY
i
SCAN TO END OF ATOM
; JSR
SCEOA
i
SCAN TO END OF ATOM.
A541 BD IB 05
LDA
VARTAB, X
4
MOVE VALUE TO 'NUMBER'.
A544 85 B8
STA
NUMBER
A546 BD 1C 05
LDA
VARTAB+1 , X
A549 85 B9
STA
NUMBER+1
A54B A9 04
LDA
•NVAR
A54D DO 6B
BNE
ATM340
i
(BRA) TO ' ATMRET ' .
A54F C8
A550 B 1 80
A552 C9 42
A 5 54 08
A555 DO 03
A557 C8
A558 B1 80
A55A 20 EB A4
A55D DO 28
A55F 29 06
A561 FO 24
A563 A5 B8
A565 85 B6
A567 A5 B9
; POINTER (INDIRECT REFERENCE)
ATM250
ATM255
INY
LDA
( I NL.N ) , Y
CMP
# 'B
PHP
BNE
ATM255
INY
LDA
( INLN), Y
JSR
AT0M2
BNE
ATM290
AND
#NVAR+NUM
BEQ
ATM290
LDA
NUMBER
STA
POINT
LDA
NUMBER+1
— eCBKNUMERIC QUANT IT Y>
; EXAMINE CHARACTER AFTER
; POINTER TO BYTE?
; SAVE ANSWER.
; NO — POINTER TO WORD.
. YES — SKIP OVER 'B ' .
i GET CHARACTER AFTER 'B'.
i SEE WHAT FOLLOWS *** RECURSIVE CALL
; ERROR.
; MUST BE NUMERIC.
; ERROR.
; RESULT IS ADDRESS OF DATA.
PILOT
H. B. STEWART
PILOT
H. B STEWART
A569
85
B7
STA
POINT+1
A56B
84
A 1
STY
TEMP
A56D
AO
00
LDY
#0
A56F
B 1
B6
LDA
(POINT ) , Y
A571
85
B8
STA
NUMBER
A573
28
PLP
A574
DO
06
BNE
ATM260
A576
84
B9
STY
NUMBER+1
A578
A9
80
LDA
#BPTR
A57A
DO
07
BNE
ATM270
A57C
CS
ATM260
I NY
A57D
B 1
B6
LDA
(POINT ) > Y
A57F
85
B9
STA
NUMBER+1
A581
A9
04
LDA
#NVAR
A583
A4
A 1
ATM270
LDY
TEMP
A585
DO
33
BNE
ATM340
A587
28
ATM290
PLP
A588
4C
20 A5
JMP
ATM099
; STRING VARIABLE — $<ANY
A58B
C8
ATM300
I NY
A58C
B 1
80
LDA
( I NLN ) / Y
A58E
C9
24
CMP
A 590
FO
2B
EEQ
ATM350
A592
20
A4
B7
JSR
CKEOA
A595
FO
89
BEQ
ATM099
A597
A5
80
LDA
I NLN
A599
85
BE
STA
NP
A59B
A5
81
LDA
INLN+1
A59D
85
BF
STA
NP + 1
A59F
84
CO
STY
NP+2
A5A1
20
B9
B7
JSR
SCEOA
A5A4
84
Cl
STY
NP+3
A5A6
98
ATM320
TYA
A5A7
48
PHA
A5A8
20
9B
B7
JSR
SETSVL
A5AB
20
81
B2
JSR
SFIND
A5AE
DO
06
BNE
ATM330
A5B0
68
PLA
A5B1
A8
TAY
A5B2
A9
08
LDA
#SVAR
A5B4
DO
04
BNE
ATM340
A5B6
68
ATM330
PLA
A5B7
A8
TAY
A5B8
A9
10
LDA
#USVAR
SAVE LINE INDEX.
GET DATA VALUE NOW.
#
i
; POINTER TO BYTE?
i NO — POINTER TO WORD.
; YES — MSB = 0.
i TYPE = POINTER TO BYTE,
i (BRA).
i GET MSB OF DATA WORD.
; TYPE = POINTER TO WORD.
; RESTORE LINE INDEX.
; (BRA) SKIP TO NORMAL RETURN.
; CLEANUP STACK BEFORE RETURN.
; ERROR RETURN.
OF ALPHANUM>
; EXAMINE CHARACTER AFTER
; STRING INDIRECTION?
; YES.
. N0 — STRING NAME ERROR?
i YES.
i NO — SET NAME POINTER TO NAME.
; SCAN TO END OF ATOM.
; SAVE END INDEX.
; SAVE LINE INDEX.
; SET LIST POINTER TO STRING VARIABLES.
; FIND VARIABLE IF DEFINED,
i UNDEFINED.
; RESTORE LINE INDEX.
; DEFINED STRING VARIABLE.
; (BRA) TO 'ATMRET'.
; RESTORE LINE INDEX.
UNDEFINED STRING VARIABLE.
( ,
PILOT — H B STEWART
ASBA 4C 07 A6
A SCO DO 11
A5C2 C9 10
A5C4 FO F4
A5C6 84 A 1
A5C8 A2 3E
A5CA AO 42
A5CC 20 C5 B3
A5CF A4 A 1
A5D1 DO D3
A5D3 60
A6
ATM340
JMP
ATMRET
AS
ATM350
JSR
ATM300
BNE
ATM360
/
X
CMP
#USVAR
l
ATM340
STY
TEMP
LDX
4NP-DTAB
LDY
#DP-DTAB
JSR
PMOVE
LDY
TEMP
BNE
ATM320
RTS
i *** SKIP BRANCH POINT ***
* INDIRECTION — GET NAME *** RECURSIVE CALL ***.
i ERROR.
i UNDEFINED STRING?
i YES — ALL DONE.B
DEFINED — USE DATA AS NAME FOR TARGET.
; (BRA) NOW GET STRING.
; NUMERIC LITERAL — CDIGITXANY NUMBER OF DIGITS>
A5D4
A2
00
ATM400 LDX
#INLN— DTAB
A5D6
20
B2 B6
JSR
ASCDEC
A5D9
A9
02
LDA
#NUM
A5DB
DO
DD
BNE
ATM340
POINT TO POINTER.
CONVERT TO BINARY, RESULT TO 'NUMBER
(BRA) TO ' ATMRET
TEXT — CLETTERXANY NUMBER OF CHARACTERS>
A5DD
A9
20
ATM500 LDA
#TEXT
A5DF
DO
D9
BNE
ATM340
; OPERATOR —
COPERATOR>
A5E1
BD
2F
A4
ATM600 LDA
CDTAB, X
A5E4
85
B6
STA
POINT
A5E6
BD
30
A4
LDA
CDTAB+1# X
A5E9
85
B7
STA
POINT+1
A5EB
A9
40
LDA
#OPR
A5ED
DO
CB
BNE
ATM340
(BRA) TO 'ATMRET'
; GET OPERATE ROUTINE ADDRESS.
(BRA) TO 'ATMRET'
; CONTROLLERS — 7. CP ! J ! TXNUMBER> OR 7.CX ! Y ! Z ! A ! H ! V ! L ! M ! F>
*
A5EF
4C
20 A5
ATM720
JMP
ATM099
; ERROR.
A5F2
C8
ATM700
I NY
; SKIP OVER '7.'.
w
A5F3
B 1
80
LDA
( I NLN ) , Y
; GET NEXT CHARACTER.
A5F5
C9
50
CMP
# 'P
; PADDLE CONTROLLER?
*
A5F7
FO
2F
BEQ
ATM730
i YES.
A5F9
C9
46
CMP
#'F
; FREE MEMORY?
%
A5FB
FO
3C
BEQ
ATM740
i YES.
A5FD
C9
4A
CMP
# 'J
; JOYSTICK?
A5FF
FO
51
BEQ
ATM760
; YES.
PILOT
H. B. STEWART
A5FB
FO
3C
BEQ
ATM740
A5FD
C9
4A
CMP
# ' J
A5FF
FO
51
BEQ
ATM760
I LOT — H
. B.
STEWART
A601 C9 54
CMP
# 7 T
A603 FO 5D
BEQ
ATM770
A605 C9 58
CMP
# 7 X
A607 FO 72
BEQ
ATM782
A609 C9 59
CMP
# 7 Y
A60B FO 72
BEQ
ATM784
A60D C9 5A
CMP
# 7 Z
A60F FO 79
BEQ
ATM788
A61 1 C9 41
CMP
# 7 A
A613 FO 6E
BEQ
ATM786
A615 C9 48
CMP
# 7 H
A617 FO 78
BEQ
ATM790
A619 C9 56
CMP
# 7 V
A61B FO 79
BEQ
ATM795
A61D C9 4C
CMP
# 7 L
A61F FO 7 A
BEQ
ATM796
A621 C9 4D
CMP
# 7 M
A623 DO CA
BNE
ATM720
A625 4C AE A6
JMP
ATM798
; READ PADDLE
CONTROLLER
A628 20' B3 A6
ATM730 JSR
ATM800
A62B DO 28
BNE
ATM761
A62D 29 07
AND
#$07
A62F AA
TAX
A630 38
SEC
A631 A9 E4
LDA
#228
A633 FD 70 02
SBC
PADDLO, X
A636 4C 71 A6
JMP
ATM780
; CALCULATE FREE MEMORY
A639 Ce
ATM740 I NY
A63A 38
SEC
A63B A5 32
LDA
S2L
A63D E5 BO
SBC
SI H
A63F 85 B8
STA
NUMBER
A641 A5 B3
LDA
S2L+1
A643 E5 B 1
SBC
S1H+1
A645 85 B9
STA
NUMBER+1
A647 E6 B8
INC
NUMBER
A649 DO 02
BNE
ATM745
A64B E6 B9
INC
NUMBER+1
A64D A9 02
ATM745 LDA
#NUM
A64F 4C D7 A6
JMP
ATMRET
; READ JOYSTICK
YES
JOYSTICK?
YES.
TRIGGER?
YES.
GRAPHICS
YES.
X?
GRAPHICS
YES.
Y?
GRAPHICS
YES.
PIXEL
VALUE.
GRAPHICS
YES.
THETA
ANGLE?
LIGHTPEN
YES.
HORIZONTAL?
LIGHTPEN
YES.
VERTICAL?
LIGHTPEN
YES.
TRIGGER?
MATCH RESULT?
NO.
YES.
GET VALUE THAT FOLLOWS 'P
ERROR.
PADDLE # MODULO 8.
(CLEAR BORROW).
RESULT = 228 - VALUE READ.
SKIP OVER 'F ' .
'NUMBER ' = 7 S2L 7 - 7 S1H 7 + 1.
TYPE = NUMBER.
PILOT
H. B STEWART
A692 20 B3 A6
ATM760 JSR
ATMBOO
A655 DO 6A
ATM761 BNE
ATM890
A657 29 03
AND
4*403
A659 AA
TAX
A65A BD 78 02
LDA
STICKO, X
A65D 49 OF
EOR
#4 OF
A65F 4C 71 A6
JMP
ATM780
1 READ TRIGGER
A662 20 B3 A6
ATM770 JSR
ATM800
A665 DO 5A
BNE
ATM890
A667 29 OF
AND
#40F
A669 AA
TAX
A66A BD 7C 02
LDA
PTRIGO, X
A66D 49 FF
EOR
#4FF
A66F 29 01
AND
#401
A67 1 A2 00
ATM780 LDX
#0
A673 85 B8
ATM781 STA
NUMBER
A675 86 B9
STX
NUMBER+1
A677 A9 02
LDA
#NUM
A679 DO 5C
BNE
ATMRET
; GRAPHICS PARAMETERS
A67B A2 6C
ATM7S2 LDX
#GX-DTAB
A67D BO 46
BCS
ATM900
A67F A2 6F
ATM784 LDX
#GY— DTAB
A681 BO 42
BCS
ATM900
A683 A5 F2
ATM786 LDA
THETA
A685 A6 F3
LDX
THETA+1
A687 C8
INY
A688 DO E9
BNE
ATM781
A68A C8
ATM788 INY
A68B 20 A 7 BC
JSR
GREAD
A68E 4C 71 A6
JMP
ATM780
; READ LIGHTPEN
A691 AD 34 02
ATM790 LDA
LPENH
A694 BO OC
BCS
ATM797
A696 AD 35 02
ATM795 LDA
LPENV
A699 BO 07
BCS
ATM797
A69B AD 78 02
ATM796 LDA
STICKO
A69E 49 01
EOR
#401
A6A0 29 01
AND
#401
A6A2 A6 92
ATM797 LDX
EXEC
A6A4 FO 05
BEQ
ATM79B
A6A6 A2 OA
LDX
#40A
GET VALUE THAT FOLLOWS 'J'.
ERROR *** SKIP BRANCH POINT ***
JOYSTICK # MODULO 4
GET JOYSTICK DATA FROM DATA BASE
INVERT DATA READ
GET VALUE THAT FOLLOWS 'T ' .
ERROR.
TRIGGER # MODULO 16.
RESULT = SINGLE BIT.
M. S. B. = O.
STORE RESULT.
NUMERIC RESULT. n
(BRA). J fVT M ^
GRAPHICS X COORDINATE.
(BRA) .
GRAPHICS Y COORDINATE.
(BRA).
GRAPHICS THETA ANGLE.
(BRA).
READ GRAPHICS DATA.
LIGHTPEN HORIZONTAL VALUE.
(BRA).
LIGHTPEN VERTICAL VALUE.
(BRA).
GET LIGHTPEN TRIGGER.
INVERT BIT OF INTEREST.
EXECUTE MODE?
NO.
BACKGROUND » LIGHT GRAY.
A6A2 A6 92
A6A4 FO 05
A6A6 A2 OA
ATM797 LDX
BEQ
LDX
PILOT — H. B. STEWART
A6A8 BE C8 02
STX
A6AB
C8
ATM79B
I NY
A6AC
DO
C3
BNE
i READ
MATCH
A6AE
A5
FD
ATM798
LDA
A6B0
C8
I NY
A6B 1
DO
BE
BNE
i SUBROUTINE
A6B3
C8
ATM800
I NY
A6B4
20
E8 A4
JSR
A6B7
DO
09
BNE
A6B9
29
06
AND
A6BB
FO
05
BEQ
A6BD
A5
B8
LDA
A6BF
C5
B8
CMP
A6C 1
60
ATM890
RTS
A6C2
A9
02
ATM895
LDA
A6C4
60
RTS
; SUBROUTINE
A6(^5 C8
A6C6 B5 82
A6C8 2A
A6C9 B5 80
A6CB 69 00
A6CD 85 B8
A6CF B5 81
A6D1 69 00
A6D3 85 B9
A6D5 A9 02
A6D7 85 A1
A6D9 C5 A1
A6DB 60
ATM900 I NY
EXEC
ATM79B
i EXECUTE MODE?
1 NO
«*0A
i BACKGROUND « LIGHT GRAY.
COLORO+4
ATM780
FLAG
i (BRA).
MATCHF
i MATCH RESULT FLAG.
ATM780
j (BRA).
TO PROCESS NUMBER
FOLLOWING 7.P# 7.J & 7.T.
ATOM
ATM895
i SKIP OVER 'P' OR 'J' OR 'T ' .
i *** RECURSIVE CALL ***.
i ERROR.
#NVAR+NUM
ATM895
i NUMERIC RESULT?
; NO — ERROR.
NUMBER
NUMBER
> YES.
i SET CC FOR NORMAL EXIT.
; RETURN WITH CC SET.
#ATMERR
i INVALID # AFTER LETTER.
; RETURN WITH CC SET.
TO ROUND & STORE THE GRAPHICS COORDINATES
DTAB+2, X
A
DTAB+O, X
#0
NUMBER
; GET FRACTIONAL PORTION.
; MSB OF FRACTION TO CARRY BIT.
; ROUND LSB.
DTAB+li X
#0
NUMBER+1
; CARRY TO MSB.
#NUM
; NUMERIC RESULT.
TEMP
TEMP
i SET CC FOR EXIT.
H B, STEWART
PILOT —
i XTYPE —
TYPE COMMAND PROCESS
A6DC 20 43 B9
i
XTYPE JSR
TEXP
; *S* LDA
EXEC
A6DF FO 6D
BEQ
XTP090
A6E1 A6 8F
LDX
TELN+3
A6E3 FO OC
BEQ
XTP010
A6E5 BD 76 05
LDA
TEXBUF— 1 * X
A6E8 C9 5C
CMP
4 '\
A6EA DO 05
BNE
XTP010
A6EC C6 8F
DEC
TELN+3
A6EE 4C F8 A6
JMP
XTP020
A6F1 A9 9B
XTP010 LDA
#EOL
A6F3 9D 77 05
STA
TEXBUF* X
A6F6 E6 8F
INC
TELN+3
i TYPE WITH
WORD SPLIT AVOIDANC
A6F8 84 AC
XTP020 STY
XTEMP+1
A6FA A4 8E
LDY
TELN+2
A6FC C4 8F
CPY
TELN+3
A6FE FO 4A
BEQ
XTP080
A700 84 AB
XTP022 STY
XTEMP
A702 A6 55
LDX
COLCRS
A704 AD 54 05
LDA
GRFLAG
A707 FO 03
BEQ
XTP025
A709 AE 91 02
LDX
TXTCOL
A70C 86 AD
XTP025 STX
XTEMP+2
A70E CA
DEX
A70F B 1 8C
XTP030 LDA
(TELN)* Y
A71 1 E8
INX
. — , — — - —
A71 2 C8
I NY
A713 C4 8F
CPY
TELN+3
A715 FO 04
BEQ
XTP035
A71 7 C9 20
CMP
#'
A719 DO F4
BNE
XTP030
A71B A4 AE
XTP035 LDY
XTEMP
A71D E4 53
CPX
RMARGN
A71F FO OB
BEQ
XTP040
A721 90 09
BCC
XTP040
A723 A5 AD
LDA
XTEMP+2
A725 C5 52
CMP
LMARGN
A727 FO 03
BEQ
XTP040
A729 20 60 B8
JSR
NEWLIN
i PROCESS TEXT EXPRESSION.
i EXECUTE MODE?
i NO.
i CHECK FOR NULL TEXT,
i NULL.
NON-NULL — CHECK FINAL CHARACTER
IS IT EOL SUPPRESS?
NO.
YES — SUPPRESS ALSO.
INSERT EOL.
V ic ?
SAVE STATEMENT INDEX.
STARTING INDEX.
NULL OUTPUT — ALL DONE.
SAVE INDEX.
GET CURRENT CURSOR POSITION.
DIFFERENT CURSOR IF SPLIT SCREEN.
SPLIT SCREEN — USE OTHER CURSOR
SAVE STARTING COLUMN #.
PRE-CONDITION THE INDEX.
FIND LENGTH OF NEXT WORD.
; END OF TEXT.
i SPACE?
i NO — KEEP SCANNING.
A72C B 1 8C
XTP040 LDA
(TELN), Y
END OF WORD — CHECK FOR WORD SPLIT.
DOES IT WRAP SCREEN?
NO — OUTPUT IT.
NO — OUTPUT IT.
; YES — IS THIS THE 1ST WORD OF LINE?
; YES — FORGET ABOUT NEW LINE.
j NO — START A NEW LINE.
; OUTPUT THE WORD JUST SCANNED.
A72C B 1 8C
XTP040
LDA
PILOT H. B STEWART
A72E
C9
20
CMP
A730
DO
06
BNE
A732
E4
53
CPX
A734
DO
02
BNE
A736
A9
9B
LDA
A738
20
6F AF
XTP050
JSR
A73B
C8
I NY
A73C
C4
8F
CP Y
A73E
FO
OA
BEQ
A740
88
DEY
A741
B 1
8C
LDA
A743
CB
I NY
A744
C9
20
CMP
A746
DO
I
E4
BNE
A748
i
FO
B6
BEQ
A74A
A4
AC
XTP080
LDY
A74C
A9
00
LDA
A74E
60
XTP090
RTS
; 'V" COMMAND
A74F
FO
8B
XTYPE2
BEQ
A751
A5
FD
LDA
A753
DO
87
BNE
A755
FO
06
BEQ
; 'N' COMMAND
A757
FO
83
XTYPE3
BEQ
A759
A5
FD
LDA
A75B
FO
F2
BEQ
A75D
XREM
A75D
4C
02 B8
XTP400
JMP
( TELN > « Y
# '
XTP050
RMARGN
XTP050
#EOL
CHOT
TELN+3
XTP080
(TELN), Y
#'
XTP040
XTP022
XTEMP+1
PROCESSOR
XTYPE.
MATCHF
XTYPE
XTP400
PROCESSOR
XTYPE
MATCHF
XTYPE2
SCNEOL
OUTPUT THE WORD JUST SCANNED
SPACE?
NO
, YES — IS IT THE LAST POSITION?
i NO.
, YES — CHANGE TO EOL.
) END OF TEXT?
i YES.
i SPACE?
SPACE?
\ NO — NOT END OF WORD.
, YES — NOW DO NEXT WORD (BRA).
} RESTORE STATEMENT INDEX,
i SET CC FOR EXIT.
; RETURN WITH CC SET.
, SYNTAX SCAN ONLY *** SKIP BRANCH POINT ***
; Y COMMAND (SAME AS # TY'>.
; SYNTAX SCAN ONLY.
; N COMMAND (SAME AS y TN').
; SKIP BRANCH TO 'XTYPE'.
i REMARK COMMAND PROCESSOR TOO.
. SCAN TO END OF LINE & RETURN WITH CC SET
0
PILOT
H B STEWART
i
i XPOS
#
XPOS
— POSITION COMMAND
PROCESSOR
A760 20 92
B8
JSR
EXP
i
COLUMN NUMBER.
A763 A5 92
LDA
EXEC
i
EXECUTE MODE?
A765 FO OF
BEQ
XP0020
i
NO.
A767 A5 94
LDA
EXPSTK+1
i
RANGE CHECK THE COLUMN #.
A769 DO 24
BNE
XP0900
i
TOO LARGE.
A76B A5 93
LDA
EXPSTK+O
A76D C9 28
CMP
#TCOL
A76F BO IE
BCS
XP0900
i
TOO LARGE.
A77 1 85 55
STA
COLCRS
i
0. K. — STORE IT.
A773 8D 91
02
STA
TXTCOL
i
SPLIT SCREEN TOO.
A776 20 EE
B7
XP0020
JSR
SKPSEP
i
SKIP SEPARATOR.
A779 20 92
B8
JSR
EXP
t
ROW NUMBER.
A 77C A5 92
LDA
EXEC
»
EXECUTE MODE?
A77E FO OE
BEQ
XP0090
i
NO.
A780 A5 94
LDA
EXPSTK+1
i
RANGE CHECK THE ROW #.
A782 DO OB
BNE
XP0900
i
TOO LARGE.
A784 A5 93
LDA
EXPSTK+O
A786 C9 IS
CMP
#TROW
A788 BO 05
BCS
XP0900
#
TOO LARGE.
A78A 85 54
STA
ROWCRS
i
0. K. — STORE IT.
A78C A9 00
LDA
#0
!
SET CC FOR NORMAL EXIT.
A78E 60
XP0090
RTS
}
RETURN WITH CC SET.
A78F A9 02
XP0900
LDA
#1 MPERR
i
COLUMN/ROW OUT OF RANGE
A791 60
RTS
i
RETURN WITH CC SET.
PILOT
H. B STEWART
; XEND — END STATEMENT PROCESSOR
I
A792
FO
14
XEND
BEQ
XEN090
A794
A6
90
LDX
USTKP
A796
FO
13
•
BEQ
XEN095
A798
86
FF
STX
RUN
A79A
CA
DEX
A79B
CA
DEX
A79C
86
90
STX
USTKP
A79E
BD
OB 05
LDA
USESTKi X
A7A1
85
84
STA
NXTL.N
A7A3
BD
OC 05
LDA
USESTK+1, X
A7A6
85
85
STA
NXTLN+1
A7A8
A9
00
XEN090
LDA
#0
A7AA
XDS090
A7AA
60
RTS
A7AB
20
37 B2
XEN095
JSR
CLOSEM
A7AE
84
AB
STY
XTEMP
A7B0
20
54 B2
JSR
REMDEV
A7B3
A4
AB
LDY
XTEMP
A7B5
A9
81
LDA
#ENDERR
A7B7
60
RTS
; SYNTAX SCAN ONLY.
; USE STACK POINTER,
i STACK EMPTY.
; SET RUN MODE EVEN IF ALREADY SET
; GET NEXT LINE ADDRESS FROM STACK
i 0. K. — SET CC FOR EXIT.
; CLOSE ALL OPEN FILES.
; STOP CONDITION.
'lOi Fc
A7B8
FO
FO
XDOS
BEQ
XDS090
i SYNTAX
A7BA
EE
FO
02
INC
CRSINH
i ENABLE
#
A7BD
6C
OA
00
JMP
(DOSVEC)
i YES
PILOT
H. B STEWART
i XRUN
i
RUN COMMAND PROCESSOR
A7C0
FO
20
XRUN
BEQ
XRN090
A7C2
85
FF
STA
RUN
i
A7C4
20
CE
A9
JSR
XNV010
i
A7C7
A5
AE
LDA
S1L
i
A7C9
85
84
STA
NXTLN
A7CB
A5
AF
LDA
S1L+1
A7CD
85
85
STA
NXTLN+1
A7CF
20
9A
BA
JSR
GCL.EAR
i
A7D2
20
B9
BE
JSR
GPINIT
i
\
A7D5
84
AB
STY
XTEMP
A7D7
20
2F
B8
JSR
NULACC
;
A7DA
A4
AB
LDY
XTEMP
A7DC
A9
00
LDA
#0
>
A7DE
85
90
STA
USTKP
j
A7EO
85
FD
STA
MATCHF
>
A7E2
60
/
XRN090
RTS
SYNTAX SCAN ONLY.
YES — ENTER RUN MODE.
CLEAR ALL VARIABLES.
SETUP THE NEXT LINE POINTER.
CLEAR SCREEN.
INITIALIZE GRAPHICS PARAMETERS.
SET ACCEPT BUFFER TO NULL.
MAKE MATCH FLAG FALSE .
. . . USE STACK INDEX . . .
... & SET CC ALSO.
PILOT — H. B STEWART
XACCPT —
ACCEPT COMMAND PROCESSOR
A7E3 20
E7
B7
XACCPT
JSR
A7E6 DO
06
BNE
A7E8 A9
01
LDA
A7EA 85
AB
STA
A7EC DO
26
BNE
A7EE 20
E8
A4
XAC003
JSR
A7F1 DO
08
BNE
A7F3^85
AB
STA
~A7F5 29
9D
AND
A7F7 DO
03
BNE
A7F9 A9
02
LDA
A7FB 60
XAC009
RTS
CHKEQS
XAC003
#NULL
XTEMP
XAC022
ATOM
XAC009
i 'b»?
i NO OR NOT YET
i SETUP FOR NULL TARGET
> (BRA).
i CHECK FOR VARIABLE
i ERROR.
XTEMP
#SVAR
XAC020
#IMPERR
> SAVE ATOM TYPE.
#SVAR+USVAR+NVAR+NULL+BPTR
» VALID ATOM TYPE.
A7FC 20 E7 B7
fXAC020
CHKEQS
A 7FF FO 13
^beq
XAC022
A801 A5 92
^
LDA
EXEC
A803 FO F6
BEQ
XAC009
A805 84 AC
STY
XTEMP+1
A807 A2 OC
LDX
#TELN-DTAB
A809 20 9E AF
JSR
GETLIN
A80C C6 8F
DEC
TELN+3
A80E 20 A8 B9
JSR
TRAILB
A811 4C 40 A8
JMP
X AC 024
A814 C8
XAC022
I NY
A81 5 A5 AB
k
/LDA
XTEMP
A817 29 18
A81 9 FO 03
A81B 20 AO AB
A81E A5 B6
A820 85 F4
A822 A5 B7
A824 85 F5
A826 20 43 B9
A829 FO DO
A82B 84 AC
A82D A5 AB
A82F 29 18
A831 FO 03
A833 20 EF AB
A836 A4 AC
AND
BEQ
JSR
#SVAR+USVAR
rAC02$\
SAVIT
i *s*
JSR
LDA
BEQ
(^JSR
XAC23B LDY
POINT
GNUMB
POINT+1
GNUMB+1
TEXP
EXEC
XAC009
XTEMP+1
XTEMP
#S VAR ■♦'US VAR
XAC23B
RE SIT
XTEMP+1
NONE OF THE ABOVE — ERROR.
RETURN WITH CC SET.
; CHECK FOR ASSIGNMENT OPTION.
; YES.
; EXECUTE MODE?
; NO.
; SAVE STATEMENT INDEX.
; GET A LINE TO THE TEXP BUFFER
; REMOVE EOL.
; PROCESS UNDERSCORE IF PRESENT.
i YES — SKIP OVER '='.
i SEE IF TARGET IS A STRII
-W
SAVE 'POINT 7 .
; EVALUATE TEXT EXPRESSION.
i EXECUTE MODE?
i NO.
i YES — RESTORE 'NP'.
i SEE IF TARGET IS A STRING?
i NO.
j YES — RESTORE 'NP' FROM
PILOT — H. B. STEWART
PILOT
H B STEWART
A838 A 5 F4
A83A 83 B6
A83C A3 F5
A83E 85 B7
A840 A3 8E
A842 83 8A
A844 AA
A845 A8
A846 A9 20
A848 DO 16
A84A E4 8F
A84C FO 27
A84E BD 77 05
A851 E 8
A852 CO FD
A854 FO IF
A856 C9 61
A858 90 06
A85A C9 7B
A85C BO 02
A85E 49 20
A860 91 88
A862 C8
A863 C9 20
A865 DO E3
GNUMB
POINT
GNUMB* 1
P0INT+1
i RESTORE 'POINT'
> SAVr ' ' ^ -Wv^xL
XAC025
CPX
BEQ
LDA
INX
XAC026 CPV
BEQ
TELN+3
XAC030
TEXBUF/ X
#ACCLNG- 1
XAC030
CHARACTER CONVERSION HERE.
CMP
BCC
CMP
BCS
EOR
XAC027 STA
I NY
CMP
BNE
A867 E4 8F
XAC028
CPX
A869 FO OF
BEQ
A86B BD 77 05
LDA
A86E E8
INX
A86F C9 20
CMP
A871 DO DF
BNE
A873 FO F2
BEQ
A875 A9 20
XAC030
LDA
A877 91 88
STA
A879 C8
I NY
A87A 84 8B
XAC031
STY
A87C A5 AB
LDA
# 'A+$20
XAC027
# 'Z+l+$20
XAC027
#$20
( ACLN > , Y
# '
XAC025
TELN+3
XAC031
TEXBUF, X
#'
XAC026
XAC028
#'
(ACLN), Y
J DONE?
J YES.
i NO — GET NEXT CHAR.
i ACCEPT BUFFER FULL.
; LOWER CASE ALPHA?
i NO.
l NO.
i YES — CONVERT TO UPPER CASE.
; BLANK?
i NO.
; YES — SKIP MULTIPLES.
; END OF TEXT.
; GET NEXT CHARACTER.
i
; BLANK?
; NO — STORE IT.
; YES — IGNORE IT (BRA)
; ADD TRAILING BLANK.
ACLN+3
XTEMP
i E|4D INDEX.
i CHECK PARAMETER TYPE AGAIN.
PILOT
H B STEWART
s
A87E C9 01
CMP
•NULL
A880 FO 2F
BEQ
X AC 190
a
A882 29 84
AND
•NVAR + BP TR
A884 DO 03
BNE
XAC100
a
A886 4C 91 AB
JMP
XCM300
A889 AO FF
X AC 100
LDY
• -1
a
A88B C8
XAC1 10
INY
A88C B1 8C
LDA
( TELN ) , Y
m
A88E C9 9B
CMP
• EOL *“
A890 FO 09
BEQ
XAC120
A892 C9 2D
CMP
•
A894 FO 05
BEQ
XAC120
A896 20 7 A B7
JSR
CNUMBR
A899 BO FO
BCS
XAC1 10
A89B A2 0 C
XAC120
LDX
•TELN-DTAB
A89D 20 B2 B6
JSR
ASCDEC
A8A0 AO 00
A8A2 A5 B8
A8A4 91 B6
A8A6 A5 AB
A8A8 C9 80
A8AA FO 05
A8AC C8
A8AD A5 B9
A8AF 91 B6
A8B1 A4 AC
A8B3 A9 00
A8B5 60
LDY
LDA
STA
LDA
CMP
BEQ
INY
LDA
STA
XAC190 LDY
LDA
RTS
#0
NUMBER
(POINT) , Y
XTEMP
#BPTR
XAC190
NUMBER* 1
(POINT), Y
XTEMP+1
#0
»
i NONE — ALL DONE
i NUMERIC VARIABLE
i STRING VARIABLE — GO TO COMMON CODE t RET
i CONVERT NUMBER TO BINARY REPRESENTATION
i SCAN TO NUMBER OR EOL
i GET A CHAR
i END OF LINE? ^
i YES — DONE
r^P y TClkX-3
i NO — MINUS SIGN^
i YES — DONE
i NO — NUMERIC DIGIT?
i NO — KEEP SCANNING
i NOW CONVERT NUMBER WE FOUND.
; MOVE VALUE TO VARIABLE.
; SEE IF POINTER TO BYTE,
i YES — ALL DONE.
; RESTORE LINE POINTER.
i SET CC FOR NORMAL EXIT.
; RETURN WITH CC SET.
/
PILOT
H. B STEWART
1
; XMATCH — MATCH COMMAND PROCESSOR
A8B6 B 1 80
XMATCH
LDA
( I NLN ) » Y
A8B8 C9 9B
CMP
#EOL
A8BA DO 03
BNE
XMA010
A8BC A9 02
LDA
# I MPERR
A8BE 60
XMA009
RTS
A8BF 20 43 B9
XMA010
JSR
TEXP
; *S*
LDA
EXEC
A8C2 FO FA
BEQ
XMA009
A8C4 A9 00
LDA
#0
A8C6 85 FD
STA
MATCHF
A8C8 A9 2C
LDA
#
A8CA 85 E2
STA
MFDEL
A8CC A5 8E
LDA
TELN+2
A8CE C5 8F
CMP
TELN+3
A8D0 FO 76
BEQ
XMA400
; THROUGHOUT
THE MAIN LOOP
A8D2 A6 8A
LDX
ACLN+2
A8D4 84 AC
STY
XTEMP+1
A8D6 A4 8E
LDY
TELN+2
A8D8 B 1 8C
LDA
( TELN ) i Y
A8DA C9 7C
CMP
# ' !
A8DC DO 05
BNE
XMA050
A8DE 85 E2
STA
MFDEL
A8E0 C8
I NY
A8E1 DO OC
BNE
XMA060
A8E3 B 1 8C
XMA050
LDA
( TELN ) > Y
A8E5 C9 IF
CMP
#CR IGHT
A8E7 DO OC
BNE
XMA100
A8E9 E8
I NX
A8EA C8
I NY
A8EB E4 8B
CPX
ACLN+3
A8ED FO 59
BEQ
XMA400
A8EF C4 8F
XMA060
CP Y
TELN+3
A8F 1 FO 55
BEQ
XMA400
A8F3 DO EE
BNE
XMA050
A8F5 84 AB
XMA100
STY
XTEMP
A8F7 84 A2
STY
TEMP+1
A8F9 86 A1
STX
TEMP
A8FB 86 8A
STX
ACLN+2
i GET FIRST MATCH FIELD BYTE.
i NULL MATCH FIELD IS ERROR
i RETURN WITH CC SET.
i EVALUATE TEXT EXPRESSION OPERAND.
i EXECUTE MODE?
i NO — DONE.
i RESET MATCH FIELD NUMBER AND FLAG.
i ' > ' IS DEFAULT MATCH FIELD DELIMITER
i CHECK FOR NULL RESULT.
i NULL PATTERN — NO MATCH.
THE X REGISTER WILL = ACCEPT START INDEX.
; ACCEPT BUFFER START INDEX,
i SAVE INPUT INDEX.
; SETUP MATCH PATTERN START INDEX.
; CHECK FOR ALTERNATE FIELD DELIMITER.
; NO ALTERNATE SPECIFIED.
; SET ALTERNATE.
; SKIP OVER VERTICAL BAR.
; (BRA).
i GET 1ST CHAR OF OPERAND.
; RIGHT ARROW?
; NO.
; YES — SKIP FIRST CHAR IN ACCEPT BUFFER,
i SKIP OVER RIGHT ARROW TOO.
; NULL ACCEPT BUFFER?
; YES — NO MATCH.
; NULL OPERAND?
; YES.
; NO (BRA).
; MAT pH DATA INDEX (INNER LOOP),
i MATfH DATA INDEX (OUTER LOOP).
I
I
PILOT
H B STEWART
A8FD E 6 FD
INC
MATC HF
A 8FF A4 AB
XMA120 LDY
XTEMP
A901 E 6 AB
INC
XTEMP
A903 C4 8 F
CP Y
TELN+3
A905 FO 37
BEQ
XMA300
A907 B 1 8C
LDA
( TELN ) • Y
A909 C5 E2
CMP
MFDEL
A90B FO 31
BEQ
XMA300
A90D A4 8A
LDY
ACLN+2
A90F E 6 8A
INC
ACLN+2
A91 1 C4 8B
CP Y
ACLN+3
A913 FO 04
BEQ
XMA140
A915 D 1 88
CMP
( ACLN ) i Y
A917 FO E6
BEQ
XMA120
A919 A5 A2
XMA140 LDA
TEMP-*- 1
A91B 85 AB
STA
XTEMP
A91D E6 A1
INC
TEMP
A91F A5 A 1
LDA
TEMP
A921 85 8A
STA
ACLN+2
A923 C5 8B
CMP
ACLN+3
A925 DO D8
BNE
XMA120
A927 A4 A2
LDY
TEMP+1
A929 B 1 8C
XMA160 LDA
(TELN), Y
A92B C4 8F
CPY
TELN+3
A92D FO 09
BEQ
XMA200
A92F C8
INY
A930 C 5 E2
CMP
MFDEL
A932 DO F5
BNE
XMA160
A934 C4 8F
CPY
TELN+3
A936 DO BD
BNE
XMA100
A938 A9 00
XMA200
LDA
#0
A93A 85 FD
STA
MATCHF
A93C FO OA
BEQ
XMA400
A93E A5 A 1
XMA300
LDA
TEMP
A940 8D 73 05
STA
MATCHX
A943 A5 8A
LDA
ACLN+2
A945 BD 74 05
STA
MATCHX+1
A948 A4 AC
XMA400
LDY
XTEMP+1
A94A A9 00
LDA
#0
A94C 85 8A
STA
ACLN+2
A94E 4C 02 B8
JMP
SCNEOL
INCREMENT MATCH FIELD NUMBER.
SEE IF ALL OF PATTERN HAS MATCHED.
YES.
NOT SURE.
YES.
NO — MORE DATA TO MATCH?
NO — AT END OF BUFFER.
YES — COMPARE DATA TO PATTERN.
SO FAR SO GOOD.
RESET MATCH PATTERN INDEX.
INCREMENT 'ACCBUF' INDEX.
INCREMENT ' TEXBUF ' INDEX TO NEXT FIELD.
END OF MATCH PATTERN DATA?
YES — NO MATCH.
KEEP SCANNING.
END OF MATCH STATEMENT?
NO.
NO MATCH — RESET FLAG.
(BRA).
SAVE START & END INDICES TO MATCH FIELD . . .
... FOR ' XMWSP 0 .
RESTORE INPUT LINE INDEX.
CLEAR LINE INDEX.
SCAN TO END OF INPUT LINE & RETURN.
PILOT
H B STEWART
i XMWSP — MATCH WITH STRING PRODUCTION COMMAND PROCESSOR
i
A951 20 B6 A8
XMWSP
JSR
XMATCH
i
FIRST DO ALL OF MATCH COMMAND.
A954 DO 30
BNE
XMS090
i
SYNTAX ERROR.
A956 A5 92
LDA
EXEC
i
EXECUTE MODE?
A958 FO 2C
BEG
XMS090
i
NO — DONE (SYNTAX SAME AS MATCH).
A95A A5 FD
LDA
MATCHF
i
WAS MATCH SUCCESSFUL?
A95C FO 28
BEG
XMS090
i
NO — ALL DONE.
A95E 84 AB
STY
XTEMP
A960 8A
TXA
i
NOW SET $LEFT = DATA FROM ACCEPT START
A961 AC 73 05
LDY
MATCHX
i
... TO START OF MATCH - 1.
A964 A2 00
LDX
#LFTSTG-STAB
A966 20 87 A9
JSR
MAKSTG
A969 DO 17
BNE
XMS080
i
ERROR.
A96B AD 73 05
LDA
MATCHX
/
THEN SET $MATCH = DATA FROM MATCH.
A96E AC 74 05
LDY
MATCHX+1
A97 1 A2 05
LDX
#MATSTG-STAB
A973 20 87 A9
JSR
MAKSTG
A976 DO OA
BNE
XMSOBO
i
ERROR.
A978 AD 74 05
LDA
MATCHX+1
i
THEN BRIGHT = DATA FROM MATCH +1 . . .
A97B A4 8B
LDY
ACLN+3
j
... TO END.
A97D A2 OB
LDX
#R ITSTG-STAB
A97F 20 87 A9
JSR
MAKSTG
A982 08
XMS080
P HP
i
SAVE CC.
A983 A4 AB
LDY
XTEMP
j
RESTORE INDEX.
A985 28
PLP
A986 60
XMS090
RTS
#
RETURN WITH CC SET.
A987 85 C4
A989 84 C 5
A98B A5 88
MAKSTG STA
STY
LDA
DP+2
DP+3
ACLN
; DEFINE DATA PORTION.
A98D 85 C2
STA
DP
A98F A5 89
LDA
ACLN+1
A991 85 C3
STA
DP+ 1
A993 BD A9 A9
LDA
STAB, X
; DEFINE NAME PORTION.
A996 85 Cl
STA
NP+3
A998 E8
I NX
A999 86 CO
STX
NP+2
A99B A9 A9
LDA
#STAB
A99D 85 BE
STA
NP
A99F A9 A9
LDA
#STAB/256
A9A1 85 BF
STA
NP + 1
A9A3 20 9B B7
JSR
SETSVL
; NAMED STRING VARIABLE LIST.
A9A6 4C B8 B2
JMP
SINSRT
; INSERT STRING & RETURN WITH CC SET.
A9A9
STAB=*
; MATCH STRING NAME TABLE.
PILOT
H B STEWART
A9A9
05
4C
45
LFTSTG . BYTE
LSENDi “LEFT"
A9AC
0005
46
54
LSEND=*-STAB
A9AE
OB
4D
41
MATSTG . BYTE
MSEND# "MATCH"
A9B 1
OOOB
54
43
48
MSEND=*-STAB
A9B4
1 1
52
49
RITSTG . BYTE
RSENDi "RIGHT"
A9B7
0011
47
48
54
RSEND=*-STAB
PILOT
H B. STEWART
i
i XNEWV — NEW VARIABLES COMMAND PROCESSOR
A9BA
20
FA
B7
XNEWV
JSR
SLB
A9BD
20
EO
B7
JSR
CHKTRM
A9C0
FO
OC
BEQ
XNV010
A9C2
C9
23
CMP
# '#
A9C4
FO
07
BEQ
XNV008
A9C6
C9
24
CMP
# '%
A9C8
FO
03
BEQ
XNV008
A9CA
A9
02
LDA
#IMPERR
A9CC
60
RTS
A9CD
C8
XNV008
I NY
i *** EXTERNAL ENTRY POINT FROM
A9CE
85
AB
XNV010
STA
XTEMP
A9D0
A5
92
LDA
EXEC
A9D2
FO
21
BEQ
XNV090
A9D4
A5
AB
LDA
XTEMP
A9D6
C9
23
CMP
# '#
A9D8
FO
OB
BEQ
XNV020
A9DA
A5
B4
LDA
S2H
A9DC
85
B2
STA
S2L
A9DE
A5
B5
LDA
S2H+1
A9E0
85
B3
STA
S2L+1
A9E2
20
37
B2
JSR
CLOSEM
A9E5
A5
AB
XNV020
LDA
XTEMP
A9E7
C9
24
CMP
#'*
A9E9
FO
03
BEQ
XNV080
A9EB
20
3B
B8
JSR
ZERVAR
A9EE
A5
FF
XNV080
LDA
RUN
A9F0
DO
03
BNE
XNV090
A9F2
20
33
BF
JSR
RDYMES
A9F5
XNE090
A9F5
A9
00
XNV090
LDA
#0
A9F7
60
RTS
SKIP LEADING BLANKS.
STATEMENT TERMINATOR?
YES — NO OPERANDS IS VALID.
; NUMERIC VARIABLES ONLY.
» STRING VARIABLES ONLY.
i IMPROPER OPERAND,
i RETURN WITH CC SET.
' XRUN ' & ' XNEW ' ***
SAVE OPERAND.
EXECUTE MODE?
NO.
GET OPERAND.
CLEAR ONLY NUMERIC VARIABLES?
YES — SKIP STRING VARIABLES.
; CLEAR STRING VARIABLES.
; CLOSE IOCBS 3 THROUGH 7.
; GET OPERAND.
; CLEAR ONLY STRING VARIABLES?
i YES — SKIP NUMERIC VARIABLES.
; ZERO NUMERIC VARIABLES & SET CC FOR EXIT.
; RUN MODE?
; YES — DON 'T PRINT 'READY ' .
; NO — PRINT 'READY'.
; SET CC FOR EXIT.
; RETURN WITH CC SET.
M B. STEWART
PILOT —
i XNEW — NEW PROGRAM PROCESSOR
i
A9F8
FO
FB
XNEW
BEG
XNE090
A9FA
20
FF A9
JSR
CLRPRG
A9FD
FO
CF
BEG
XNV010
A9FF
A3
AE
CLRPRG
LDA
S1L
AAOl
83
BO
STA
S1H
AA03
A3
A F
LDA
S1L+1
AA05
85
B1
STA
SI H+ 1
AA07
A9
00
LDA
#0
AA09
85
90
STA
USTKP
AAOB
60
RTS
i SYNTAX SCAN ONLY
i CLEAR THE PROGRAM STORAGE AREA
i (BRA) NOW CLEAR THE VARIABLES ALSO
i YES — CLEAR PROGRAM STORAGE AREA
i CLEAR USE STACK,
i RETURN WITH CC AND A * ZERO
i XCALL — CALL MEMORY LOCATION PROCESSOR
i
AAOC 20 92 B8
XCALL
JSR
EXP
AAOF A3 92
LDA
EXEC
AA1 1 FO OE
BEQ
XCL090
AA13 98
TYA
AA14 48
PHA
AA1 5 20 22 AA
JSR
XCL100
AA1 8 68
PLA
AA 19 A8
TAY
AA1 A 58
CLI
AA1B D8
CLD
AA1C A9 00
LDA
#0
AA1E 60
RTS
AA1F A9 02
XCL080
LDA
#IMPERR
AA21 60
XCL090
RTS
AA22 6C 93 00
XCL100
JMP
( EXPSTK
; ADDRESS SHOULD FOLLOW
i EXECUTE MODE?
; NO.
i SAVE THE LINE INDEX FOR THE USER.
. "OFF WE GO/ INTO THE WILD BLUE YONDER 1 ’
; UNBELIEVEABLEi THE USER RETURNED.
; RESTORE THE LINE INDEX.
; JUST IN CASE!
; DITTO.
i SET CC FOR EXIT,
i RETURN WITH CC SET.
i ERROR.
; RETURN WITH CC SET.
; TOO LATE TO CHANGE YOUR MIND.
PILOT
H. B. STEWART
t
i XUSE
— USE
COMMAND PROCESSOR
AA25
FO
21
#
XUSE
BEQ
X JMP
; LET 7 X JMP 7 PERFORM SYNTAX CHECK.
AA27
A5
FF
LDA
RUN
; IF IMMEDIATE — DON'T PUT ANYTHING IN STACK.
AA29
FO
19
BEQ
XUS100
AA2B
A6
90
LDX
USTKP
i USE STACK POINTER.
AA2D
EO
10
CPX
#USTKSZ
AA2F
FO
10
BEQ
XUS090
; STACK FULL.
AA31
A5
84
LDA
NXTLN
; NEXT LINE ADDRESS TO USE STACK.
AA33
9D
OB
05
STA
USESTK/ X
AA36
A5
85
LDA
NXTLN+1
AA38
9D
OC
05
STA
USESTK+1, X
AA3E
E8
I NX
AA3C
E8
I NX
AA3D
86
90
STX
USTKP
AA3F
DO
OC
BNE
XJP005
; REST OF COMMAND IS JUST LIKE 7 J: 7 (BRA).
AA4 1
A9
8B
XUS090
LDA
#USOERR
; STACK OVERFLOW ERROR.
AA43
60
RTS
AA44
85
90
XUS 100
STA
USTKP
i CLEAR USE STACK.
AA46
FO
05
BEQ
XJP005
; (BRA).
PILOT
H. B STEWART
i
i XJMP — JUMP COMMAND PROCESSOR
-
AA40
DO
03
XJMP
BNE
XJP005
i
AA4A
4C
Cl B7
JMP
SCNLBL
i
i *** EXTERNAL
ENTRY POINT
(FROM
AA4D 20 FA B7
XJP005 JSR
SLB
A A 50 C8
I NY
i
i
AA51 84 C4
STY
DP +2
AA53 20 B9 B7
JSR
SCEOA
i
AA56 84 C 5
STY
DP +3
AA58 A5 80
LDA
INLN
AA5A 85 C2
STA
DP
AA5C A5 81
LDA
INLN+1
AA5E 85 C3
STA
DP + 1
AA60 20 92 B7
JSR
STMLST
#
AA63 84 AB
STY
XTEMP
i
AA65 A2 3A
XJP030 LDX
#LP-DTAB
j
AA67 20 9D B3
JSR
SEND
AA6A FO 36
BEQ
XJP200
)
AA6C AO 06
LDY
#6
i
AA6E B1 BA
LDA
(LP)i Y
AA70 C9 2A
CMP
# '*
AA72 DO 26
BNE
XJP060
i
AA74 C8
AA75 84 Ce
I NY
STY
MP+2
i
AA77 B1 BA
XJP040 LDA
( L.P ) / Y
j
AA79 CB
I NY
AA7A 20 A4 B7
JSR
CKEOA
j
AA7D DO F8
BNE
XJP040
i
AA7F 88
DEY
AA80 84 C9
STY
MP+3
AA82 A5 BA
LDA
LP
j
AA84 85 C6
STA
MP
i
AA86 85 84
STA
NXTLN
#
AA88 A5 BB
LDA
LP + 1
AA8A 85 C7
STA
MP+1
AA8C 85 85
STA
NXTLN+1
AA8E 20 F8 B2
JSR
SCOMP
#
AA91 DO 07
BNE
XJP060
#
AA93 A4 AB
LDY
XTEMP
#
AA95 84 FF
STY
RUN
AA97 A9 00
LDA
#0
AA99 60
RTS
j
AA9A A2 3A
XJP060 LDX
#LP-DTAB
#
PILOT
H. B. STEWART
EXECUTE MODE
SCAN OVER LABEL & RETURN.
XJMPM' «< ' XUSE * ) ***
SKIP OVER
SETUP 'DP' TO POINT TO JUMP LABEL
SCAN TO END OF LABEL.
SETUP TO SCAN STATEMENT LIST.
SAVE INPUT LINE POINTER.
CHECK FOR END OF STATEMENT LIST.
END OF LIST — LABEL NOT FOUND.
CHECK FOR PRESENCE OF LABEL.
NO — TRY NEXT STATEMENT.
YES — SETUP 'MP' TO POINT TO STATEMENT LABEL.
SCAN TO END OF LABEL.
END OF ATOM (LABEL)?
NO.
SETUP POINTERS FOR . . .
. . . 'SCOMP ' CALL . . .
. . . & STATEMENT TO EXECUTE.
COMPARE LABELS.
NO MATCH.
RESTORE INPUT LINE POINTER.
SET RUN MODE EVEN IF ALREADY SET.
RETURN WITH CC SET.
GET POINTER TO NEXT STATEMENT.
AA99 60
RTS
AA9A A2 3A XJP060 LDX #LP-DTAB
PILOT —
H. B.
STEWART
AA9C
20
10 B4
JSR
SNXTI
AA9F
4C
65 AA
JMP
XJP030
AAA2
A4
C4
XJP200 LDY
DP+2
AAA4
A9
OA
LDA
#UNDERR
AAA6
60
RTS
RETURN WITH CC SET.
GET POINTER TO NEXT STATEMENT.
RESTORE LINE INDEX.
UNDEFINED LABEL.
RETURN WITH CC SET.
-VMS
r
PILOT — H. B. STEWART
; XJMPM — JUMP ON MATCH RESULT COMMAND PROCESSOR
i EXECUTE MODE
AAA7
DO
OC
XJMPM
BNE
XJM030
AAA9
20
Cl
B7
JSR
SCNLBL
AAAC
DO
26
BNE
XJM090
AAAE
20
Cl
B7
XJM010
JSR
SCNLBL
AAB 1
FO
FB
BEQ
XJM010
AAB3
DO
ID
BNE
XJM050
AAB 5
A5
FD
XJM030
LDA
MATCHF
AAB7
FO
11
BEQ
XJM043
AAB9
AA
TAX
AAB A
CA
XJM040
DEX
AABB
DO
10
BNE
XJM045
AABD
20
EE
B7
JSR
SKPSEP
AACO
20
EO
B7
JSR
CHKTRM
AAC3
FO
OF
BEQ
XJM090
AAC5
20
4D
AA
JSR
XJP005
AAC8
DO
OA
BNE
XJM090
A AC A
4C
02
B8
XJM043
JMP
SCNEOL
AACD
20
Cl
B7
XJM045
JSR
SCNLBL
AADO
FO
ES
BEQ
XJM040
AAD2
A9
00
XJM050
LDA
#0
AAD4
XDU090
AAD4
60
XJM090
RTS
i SCAN OVER FIRST LABEL
• NOT EVEN ONE LABEL — ERROR
i SCAN OVER REMAINING LABELS
i NORMAL RETURN.
i WAS PREVIOUS MATCH SUCCESSFUL?
i NO — NO JUMP.
i YES — USE FIELD # AS LOOP COUNT.
; NOT THERE YET.
; PRE— VALIDATE NEXT LABEL.
; END OF STATEMENT?
i YES — 0. K.
; LET ' X JMP ' DO THE DIRTY WORK.
; ERROR.
i SCAN TO END OF STATEMENT & RETURN.
; SCAN OVER LABEL.
; THERE WAS ONE THERE.
TOO FEW LABELS IS O. K.
; RETURN WITH CC SET.
PILOT — H. B. STEWART
PILOT — H. B. STEWART
AAD5 FO FD
AAD7 84 AC
AAD9 CE FE 02
AAF7 A9 3D
AAF9 20 6F AF
AAFC A9 27
AAFE 20 6F AF
AB01 20 IF AB
AB04 A9 27
AB06 20 6F AF
AB09 20 60 B8
ABOC A2 3A
ABOE 20 10 B4
ABU 4C DF AA
XDUMP — STRING S. NUMERIC VARIABLE DUMP COMMAND PROCESSOR
i SYNTAX SCAN.
. YES — SAVE INPUT LINE INDEX.
; CLEAR SCREEN.
XDUMP
BEQ
XDU090
STY
XTEMP+ 1
. IF
DEBUG
LDA
#CLEAR
JSR
CHOT
. ENDIF
DEC
DSPFLG
SET DISPLAY CONTROL CHARS FLAG
DUMP ALL OF THE STRING VARIABLES
. IF
LDA
JSR
JSR
. ENDIF
DEBUG
#16
MESSOT
NEWLIN
AADC
20
9B
B7
JSR
SETSVL
AADF
AAE1
AAE4
A2
20
FO
3A
9D
2E
B3
XDU005
LDX
JSR
BEQ
#LP-DTAB
SEND
XDU080
AAE6
AAE8
AAEA
A2
AO
20
38
3A
CF
B3
LDX
LDY
JSR
#NUMBER-DTAB
#LP-DTAB
DMOVI
AAED
AAEF
A9
20
24
6F
AF
LDA
JSR
#'$
CHOT
AAF2
AAF4
AO
20
02
IF
AB
LDY
JSR
#2
PRTSFD
AAF7
XDU020
. IF
JSR
DEBUG
PRTEQS
. ENDIF
. IF
LDA
JSR
. ENDIF
LDA
JSR
JSR
XDU040 LDA
JSR
JSR
DEBUG-1
#' =
CHOT
#' '
CHOT
PRTSFD
#' '
CHOT
NEWLIN
ldx #lp-dtab
JSR SNXTI
jMP XDU005
,, , nc THF NON-ZERO NUMERIC VARIABLES
PRODUCE STRING VARIABLE HEADER.
POINT TO STRING LIST.
END OF STRING STORAGE?
YES — DONE.
MOVE STRING POINTER TO NUMBER
PREFIX NAME WITH '$'•
J PRINT STRING NAME.
i SEPARATE NAME AND DATA WITH
i SEPARATE NAME AND DATA WITH
; DELIMIT STRING DATA WITH
i PRINT STRING DATA,
j CLOSING DELIMITER,
i END OF STRING,
i INCREMENT TO NEXT STRING.
AB14 20 60 B8
XDU080 JSR
NEWLIN
r
PILOT — MB STEWART
XDU082
XDU085
XDU087
. IF
DEBUG
LDA
• 17
JSR
ME S SOT
JSR
NEWLIN
LDY
•0
LDA
VARTAB, Y
STA
NUMBER
LDA
VARTAB* l » Y
STA
NUMBER* 1
ORA
NUMBER
BEQ
XDUO05
LDA
• '•
JSR
CHOT
TYA
LSR
A
ADC
# 'A
JSR
CHOT
JSR
PRTEQS
LDX
•NUMBER-DTAB
JSR
DEC ASC
JSR
SPACES
I NY
INY
CPY
#52
BNE
XDU082
JSR
NEWLIN
JSR
NEWLIN
THE CONTENT OF THE USf
LDA
#18
JSR
MESSOT
JSR
NEWLIN
LDX
USTKP
BEQ
XDU088
JSR
SPACE
LDA
USESTK— 2< X
STA
POINT
LDA
USESTK—1 / X
STA
POINT+1
JSR
GTLNNO
STX
XTEMP
LDX
#L INENO-DTAB
JSR
DECASC
LDX
XTEMP
DEX
DEX
BNE
XDU087
JSR
NEWLIN
numeric variable header
MOVE VARIABLE VALUE TO NUMBER'
j TEST FOR ZERO VALUE
i ZERO — DON'T PRINT
i PRODUCE VARIABLE NAME
i VALUE.
i BUMP INDEX TO NEXT VARIABLE.
i DONE?
i NO.
STACK
; PRODUCE USE STACK HEADER
; STACK EMPTY?
; YES.
i NO — PRINT LINE #<S).
; GET POINTER TO STORED LINE.
; EXTRACT LINE NUMBER.
; PRINT LINE NUMBER.
MORE TO PRINT.
PILOT
H. B. STEWART
JSR
NEWLIN
PILOT — H. B. STEWART
XDU088 JSR NEWLIN
; DUMP THE GRAPHICS PARAMETERS
LDA
#19
JSR
MESSOT
JSR
NEWLIN
LDA
# 'X
JSR
CHOT
JSR
PRTEGS
LDX
#GX-DTAB
JSR
DECASC
JSR
SPACES
LDA
# 'Y
JSR
CHOT
JSR
PRTEGS
LDX
#GY-DTAB
JSR
DECASC
JSR
SPACES
LDA
#20
JSR
MESSOT
LDX
#THETA-DTAB
JSR
DECASC
JSR
NEWLIN
i REPORT ON FREE MEMORY
JSR NEWLIN
LDA #21
JSR MESSOT
LDY #S2L-DTAB
JSR DLOADA
LDY #S1H-DTAB
JSR DSUBA
LDA #1
JSR DADDS
JSR DECASC
JSR NEWLIN
. END IF
AB 1 7
EE
FE 02
INC
DSPFLG
AB 1 A
A4
AC
LDY
XTEMP+1
ABIC
ABIE
A9
60
00
LDA
RTS
#0
. IF
DEBUG
PRTEGS LDA
# 7 =
JMP
CHOT
. END IF
AB IF B 1 B8
PRTSFD LDA
(NUMBER)/ Y
; PRODUCE GRAPHICS HEADER.
; X=FLOOR ( <VALUE> ) .
. / /
i —
; Y=FL.OOR ( CVALUE> ) .
. / — ✓
f —
; THETA=<VALUE>.
; FREE MEMORY = <VALUE>.
; <VALUE> = 'S2L' - 'S1H' + 1.
; PRINT RESULT.
RESET DISPLAY CONTROL CHARS FLAG.
DONE — RESTORE INPUT LINE INDEX.
SET CC FOR EXIT.
RETURN WITH CC SET.
; PRINT '=' . . .
i ... ^ RETURN.
; GET NAME/DATA LENGTH.
r»*ss Forms, In
PILOT
H. B. STEWART
AB21
AA
TAX
AB22
FO
12
BEQ
PFD090
} DONE.
AB24
C8
PFD010
I NY
AB25
DO
02
BNE
PFD020
AB27
E6
B9
INC
NUMBER+1
i INDEX WRAPAROUND
AB29
B 1
B8
PFD020
LDA
(NUMBER ) > Y
i GET CHARACTER.
AB2B
20
6F AF
JSR
CHOT
; DONE?
AB2E
CA
DEX
PFD010
AB2F
DO
F3
BNE
» NO.
AB31
C8
I NY
PFD090
i YES.
AB32
DO
02
BNE
AB34
E6
B9
INC
NUMBER+1
; INDEX WRAPAROUND
AB36
60
PFD090
RTS
— BUMP POINTER
i i n
CTrUADT
I
PILOT
H. B STEWART
COMPUTE COMMAND PROCESSOR
AB37 20 E8
A4
XCMPUT
JSR
ATOM
AB3A DO 63
BNE
XCM900
AB3C C9 04
CMP
#NVAR
AB3E FO OB
BEQ
XCM100
AB40 C9 80
CMP
#BPTR
AB42 FO 07
BEQ
XCM100
AB44 29 18
AND
#SVAR+USVAR
AB46 DO 36
BNE
XCM200
AB48 A9 02
XCM092
LDA
#IMPERR
AB4A 60
RTS
; ARITHMETIC
ASSIGNMENT
AB4B 85 AB
XCM100
STA
XTEMP
AB4D 20 E7
B7
JSR
CHKEQS
AB50 DO F6
BNE
XCM092
AB52 A5 B6
LDA
POINT
AB54 48
PHA
AB55 A5 B7
LDA
POINT+1
AB57 48
PHA
AB58 C8
I NY
AB59 20 92
B8
JSR
EXP
AB5C 68
PLA
AB5D 85 B7
STA
POINT+1
AB5F 68
PLA
AB60 85 B6
STA
POINT
AB62 A5 92
LDA
EXEC
AB64 FO 39
BEQ
XCM900
AB66 84 AC
STY
XTEMP+1
AB68 AO 00
LDY
#0
AB6A A5 93
LDA
EXPSTK
AB6C 91 B6
STA
(POINT), Y
AB6E A5 AB
LDA
XTEMP
AB70 C9 80
CMP
#BPTR
AB72 FO 05
BEQ
XCM120
AB74 Ce
I NY
AB75 A5 94
LDA
EXPSTK+1
AB77 91 B6
STA
(POINT), Y
AB79 A4 AC
XCM120
LDY
XTEMP+1
AB7B A9 00
LDA
#0
AB7D 60
RTS
; STRING ASSIGNMENT
I
CHECK FOR TARGET VARIABLE.
INVALID ATOM.
NUMERIC ASSIGNMENT.
BYTE POINTER?
YES — SAME AS NUMERIC VARIABLE.
STRING ASSIGNMENT?
YES.
NO — ERROR.
SAVE TARGET TYPE.
CHECK FOR ASSIGNMENT OPERATOR NEXT.
ASSIGNMENT SYNTAX ERROR.
SAVE TARGET ADDRESS.
PREPARE TO EVALUATE EXPRESSION.
EVALUATE EXPRESSION.
RESTORE TARGET ADDRESS.
EXECUTE MODE?
NO.
SAVE LINE INDEX.
STORE RESULT TO TARGET.
SEE IF TARGET IS POINTER TO BYTE.
YES — ALL DONE.
NO — NOW MSB.
RESTORE LINE INDEX.
COMPUTE WAS A SUCCESS.
PILOT
H B STEWART
AB7E 20 E7 B7
AB81 DO C5
AB83 20 AO AB
AB86 C8
AB87 20 43 B9
AB8A FO 13
AB8C 84 AC
AB8E 20 EF AB
AB91 A2 42
AB93 AO OC
AB95 20 C 5 B3
AB98 20 B8 B2
AB9B 08
AB9C A4 AC
AB9E 28
AB9F 60
XCM200 JSR
BNE
JSR
I NY
JSR
i *S* LDA
BEQ
CHKEQS
XCM092
i ASSIGNMENT OPERATOR?
t NO — ERROR
V bjf
i
EXEC
XCM900
i SKIP OVER
i EVALUATE TEXT EXPRESSION
i EXECUTE MODE?
i NO — DON'T DO ASSIGNMENT
STY
JSR
XTEMP+1
RESIT
i RESTORE 'NP' FROM 'MR
i *** EXTERNAL ENTRY POINT FROM 'XACCPT' ***
‘••W » fAf *
XCM300 LDX
LDY
JSR
/T
JSR
PHP
LDY
PLP
XCM900 RTS
ABAO A5 92
ABA2 FO 40
ABA4 98
ABA5 48
ABA6 A5 BO
ABAS 85 D2
ABAA 85 C6
ABAC A5 B 1
ABAE 85 D3
ABBO 85 C7
ABB2 A9 01
ABB4 85 D4
ABB6 85 D5
ABB8 20 27 B4
ABBB DO 2 F
ABBD AO 02
A BBF 84 C8
ABC 1 84 C9
ABC3 A4 CO
ABCS C4 Cl
ABC7 FO 1C
ABC9 C4 Cl
SAVIT
LDA
BEQ
TYA
PHA
EXEC
SAV090
JSR
BNE
SAV010 CPY
S1H
MEMA
MP
S1H+1
MEMA+1
MP + 1
#257
MEMB
#257/256
MEMB+1
MALLOC
SAV190
#2
MP+2
MP+3
NP+2
NP+3
SAV100
NP+3
; EXECUTE MODE?
j NO.
; SAVE Y REGISTER
; 'MEMA' = 'S 1H ' .
; 'MP' = ' S 1 H ' ALSO.
'MEMB ' = 257.
; #** ALL THIS JUST FOR OVERFLOW TEST??? ***
TARGET STRING START INDEX.
SOURCE STRING START INDEX.
NULL SOURCE?
YES — ERROR.
i END OF STRING?
PILOT
H. B. STEWART
ABC9 C4 Cl
SAV010
PILOT — H B STEWART
ABCB FO 19
ABCD
B 1
BE
ABCF
C8
ABDO
84
A 1
ABD2
20
A4 B7
ABD9
FO
OE
ABD7
A4
C9
ABD9
91
C6
ABDB
C8
ABDC
84
C9
ABDE
A4
A 1
ABEO
DO
E7
ABE2
68
SAV080
ABE3
A8
ABE4
60
SAV090
ABE9
20
EF AB
SAV100
ABE8
68
ABE9
A8
ABEA
A9
82
ABEC
4C
6C A 1
SAV190
ABEF
A9
C6
RESIT
ABF1 89 BO
ABF3 A9 C7
ABF9 89 B 1
ABF7 A2 3E
ABF9 AO 46
ABFB 4C C9 B3
CPY NP+3
BEQ
SAV080
1
LDA
(NP), Y
i
I NY
STY
TEMP
JSR
CKEOA
j
BEQ
SAV100
1
LDY
MP+3
i
STA
(MP ), Y
1 NY
STY
MP+3
LDY
TEMP
BNE
SAV010
i
PLA
j
TAY
RTS
JSR
RESIT
t
PLA
i
TAY
LDA
4ATMERR+NS
l
JMP
PSTOP
l
LDA
MP
\
STA
SI H
LDA
MP + 1
STA
S 1 H+ 1
LDX
#NP-DTAB
)
LDY
#MP~DTAB
JMP
PMOVE
j
END OF STRINO?
YES
NO — GET A CHAR.
END OF ATOM (STRING NAME)?
YES — ERROR
STORE A CHAR
TRY AGAIN (BRA).
RESTORE Y REGISTER.
UNDO WHAT WE DID.
RESTORE Y REGISTER.
INVALID STRING NAME.
ABORT COMMAND.
DEALLOCATE TEMPORARY MEMORY.
RESTORE 'NP' FROM 'MP' ...
. . . & RETURN.
PILOT
H B STEWART
t
i XGRAPH — GRAPHICS COMMAND PROCESSOR
ABFE
A5
92
XGRAPH
LDA
EXEC
AC 00
FO
08
BEQ
XGR020
AC 02
AD
54
05
LDA
GRFLAG
AC05
DO
03
BNE
XGR020
AC 07
20
D5
AF
JSR
GSOPEN
ACOA
20
19
AC
XGR020
JSR
GCOMND
ACOD
20
FA
B7
JSR
SLB
AC 10
C8
INY
AC 11
C9
3B
CMP
# 'i
AC 13
FO
E9
BEQ
XGRAPH
AC 15
88
DEY
AC 1 6
A9
00
LDA
#0
AC 18
60
RTS
i EXECUTE MODE?
i NO
i YES — GRAPHICS SCREEN OPEN?
i YES.
i NO — OPEN GRAPHICS SCREEN
» PROCESS ONE GRAPHICS SUB-COMMAND
i SEE IF MULTIPLES.
i YES.
i NO — ALL DONE.
; CLEAR CC FOR NORMAL EXIT.
; RETURN WITH CC SET.
AC 1 9 20 FA B7
AC 1C C9 28
AC IE FO 22
AC20 20 E8 A4
AC23 DO 1A
AC25 29 86
AC27 DO 2A
AC29 A2 97
AC2B 20 10 A3
AC2E DO OF
AC30 BD 2F A4
AC 33 8D 06 05
AC 36 BD 30 A4
AC39 8D 07 05
AC3C 4C 05 05
AC3F 4C 6C A1
. 'GCOMND ' PROCESS ONE GRAPHICS SUB-COMMAND OR NESTED GROUP.
GCOMND
GCM090
JSR
SLB
}
CMP
# ' (
i
BEQ
GCM100
JSR
ATOM
f
BNE
GCM090
i
AND
#NUM+NVAR+BPTR
#
BNE
GCM200
#
LDX
#GT AB— CT AB
«
JSR
CMATCH
BNE
GCM090
j
LDA
CDTAB, X
i
STA
GJUMP+i
LDA
CDTAB+1, X
STA
GJUMP+2
JMP
GJUMP
i
JMP
PSTOP
$
SKIP LEADING BLANKS.
CHECK FOR GROUPING WITH
CHECK ATOM TYPE.
ATOM ERROR.
IF NUMERIC, THEN TREAT AS ITERATION COUNT.
YEP.
NQ — ASSUME ITS A SUB-COMMAND.
NO — ERROR.
SETUP ADDRESS OF G-RQUTINE.
GO TO G-ROUTINE & RETURN.
FATAL ERROR — STOP EXECUTION.
; THIS SECTION HANDLES NESTED GROUPS.
AC42 C8 GCM100
AC43 20 FE AB
AC46 20 FA B7
AC49 C8
AC4A C9 29
AC4C FO 4C
AC4E 88
AC4F A9 02
INY
JSR
XGRAPH
#
I
JSR
INY
SLB
CMP
# ' )
i
BEQ
GCM390
#
DEY
LDA
#NSTERR
i
SKIP OVER ' <
PROCESS ONE SUB-COMMAND
OR NESTED GROUP.
MATCHING PAREN?
YES — 0. K.
NO — ERROR.
PILOT
H. B. STEWART
AC4E 88
AC4F A9 02
DEY
LDA
#NSTERR
i NO
ERROR
PILOT — H. B STEWART
AC 51
DO
EC
BNE
GCM090
; THIS
SECTION
HANDLES I
AC 53
A5
92
GCM200
LDA
EXEC
AC55
FO
36
BEQ
GCM300
AC 57
A5
B8
LDA
NUMBER
AC 59
05
B9
ORA
NUMBER+1
AC5B
FO
30
BEQ
GCM300
AC5D
A5
DE
LDA
LS
AC5F
48
PHA
AC60
A5
DF
LDA
LS+1
AC62
48
PHA
AC63
98
TYA
AC64
48
PHA
AC65
A5
B8
LDA
NUMBER
AC67
85
DE
STA
LS
AC69
A5
B9
LDA
NUMBER+1
AC6B
85
DF
STA
LS+1
AC6D
20
19
AC
GCM220
JSR
GCOMND
AC70
A2
5E
| DX
#LS-DTAB
AC72
A9
FF
/lda
#-i
AC 74
20
4D
B6
VjJSR
DADDS _J
AC 77
A5
DE
lda
rsr"
AC79
05
DF
ORA
LS+1
AC7B
FO
08
BEQ
GCM240
AC7D
20
46
B8
JSR
ABRTCK
AC80
68
PLA
AC 81
48
PHA
AC82
A8
TAY
AC83
DO
E8
BNE
GCM220
AC85
68
GCM240
PLA
AC86
68
PLA
AC87
85
DF
STA
LS+1
AC89
68
PLA
AC8A
85
DE
STA
LS
AC8C
60
RTS
; THIS
SECTION
SYNTAX SC
AC8D
A5
92
GCM300
LDA
EXEC
AC8F
48
PHA
AC90
A9
00
LDA
#0
AC92
85
92
STA
EXEC
AC94
20
19
AC
JSR
GCOMND
AC97
68
PLA
AC 98
85
92
STA
EXEC
AC 9 A
60
GCM390
RTS
i (BRA).
IS
i EXECUTE MODE?
i NO — SYNTAX SCAN ONLY.
; SEE IF ZERO ITERATIONS.
i YES — SCAN OVER ITERATION BODY.
i NO — SAVE COUNTER ('LS') ...
i ... St LINE INDEX,
i GET LOOP COUNT TO 'LS'.
PROCESS ONE COMMAND.
DECREMENT ITERATION COUNT.
CHECK FOR RESULT = 0.
DONE.
CHECK FOR OPERATOR ABORT.
NOT DONE — RESTORE SCAN INDEX
; (BRA) EXECUTE BODY AGAIN.
i THROW AWAY STARTING INDEX.
; RESTORE 'LS'.
SYNTAX SCANS THE BODY OF AN ITERATION.
; SAVE CURRENT VALUE.
; SETUP FOR SCAN ONLY
; **# RECURSIVE CALL ***
; RESTORE MODE.
i RETURN WITH CC SET.
DDOUL
PILOT — H B. STEWART
'/
I
i X SOUND — SOUND COMMAND PROCESSOR'
i
AC9B A2 08
X SOUND
LDX
»AUREGS*2
AC9D 86 AB
STX
XTEMP
AC9F A3 92
LDA
EXEC
ACA1 FO 03
BEQ
XSD020
AC A3 20 72 B8
JSR
AUDCLR
ACA6 20 E8 A4
XSD020
JSR
ATOM
ACA9 DO 32
BNE
XSD090
ACAB C9 01
CMP
#NULL
ACAD FO 2E
BEQ
XSD090
ACAF C9 02
CMP
#NUM
ACB1 DO 08
BNE
XSD023
ACB3 A3 B8
LDA
NUMBER
ACB3 09 80
ORA
#S80
ACB7 83 B7
STA
POINT+1
ACB9 DO 04
BNE
XSD027
ACBB 29 84
XSD023
AND
#NVAR+BPTR
ACBD FO 1C
BEQ
XSD085
ACBF A6 AB
XSD027
LDX
XTEMP
ACC 1 A5 92
LDA
EXEC
ACC3 FO OA
BEQ
XSD030
ACC 5 A5 B6
LDA
POINT
ACC7 9D 53 05
STA
AUD I OR— 2/ X
ACCA A5 B7
LDA
POINT+1
ACCC 9D 54 05
STA
AUDIOR— 1 1 X
ACCF CA
XSD030
DEX
ACDO CA
DEX
ACD1 FO OA
BEQ
XSD090
ACD3 86 AB
STX
XTEMP
ACD5 20 EE B7
JSR
SKPSEP
ACD8 4C A6 AC
JMP
XSD020
ACDB
XINOSO
ACDB A9 02
XSD085
LDA
#1 MPERR
A CDD
XIN090
ACDD 60
XSD090
RTS
PILOT — H. B. STEWART
SETUP INDEX TO « OF REOS
i EXECUTE MODE?
* NO.
i YES — CLEAR AUDIO REGISTERS
i SCAN FOR VARIABLE NAME,
i ATOM SYNTAX ERROR
i END OF OPERANDS?
i YES.
i NUMERIC CONSTANT?
i NO.
i YES — SAVE VALUE.
i SET FLAG FOR 'TONES'.
(BRA) .
NUMERIC VARIABLE?
NO.
GET INDEX (5 - OPERAND #).
EXECUTE MODE?
NO — CONTINUE SYNTAX SCAN.
YES — PUT VAR ADDRESS TO LIST.
; NO MORE OPERANDS ALLOWED.
; SKIP SEPARATOR.
; IMPROPER OPERAND.
RETURN WITH CC SET.
—
PILOT
H. B. STEWART
ACDE A9 04
ACEO 20 B7 B 1
ACE3 DO F8
i XIN — READ COMMAND PROCESSOR
XIN LDA #OREAD
JSR SCNDEV
BNE XIN090
READ DIRECTION.
CONVERT DEVICE SPEC TO IOCB INDEX.
ERROR.
ACE5 86 AD
ACE7 20 EE B7
ACEA 20 E8 A4
ACED DO EE
STX
XTEMP+2
i SAVE
IOCB
INDEX.
JSR
SKPSEP
i SKIP
OVER
SEPARATOR.
JSR
BNE
ATOM
XIN090
i FIND
; ERROR
TYPE
OF VARIABLE.
ACEF 85 AB
ACF 1 29 9D
ACF3 FO E6
STA
AND
BEQ
XTEMP * SAVE ATOM TYPE.
#SVAR+USVAR+NVAR+NULL+BPTR ; VALID TYPE?
XIN080 i NO.
ACF5 A5 92
ACF7 FO E4
LDA EXEC
BEQ XIN090
i EXECUTE MODE?
; NO.
ACF9 84 AC
ACFB A6 AD
ACFD AO 00
ACFF 84 8E
AD01 AD 60 05
AD04 C9 45
AD06 DO 04
STY XTEMP+1
LDX XTEMP+2
LDY #0
STY TELN+2
LDA OPNBUF
CMP #'E
BNE XIN030
AD08 98
AD09 20 65 B8
TYA
•JSR CRSNOP
ADOC 20 11 B 1
ADOF C9 9B
ADI 1 FO OE
XIN030 JSR
DIN
CMP
#EOL
EEQ
XIN040
SAVE LINE INDEX.
GET IOCB INDEX.
INIT INDEX TO ACCEPT BUFFER.
; SEE IF READING FROM TEXT SCREEN.
; NO.
; YES — ENABLE CURSOR (Y = 0).
; MAKE IT APPEAR.
; GET A CHARACTER FROM DEVICE,
i END OF LINE?
; YES — DONE.
AD 13 91 8C
ADI 5 C8
AD 16 CO FE
AD 18 DO F2
ADI A 20 11 B 1
AD ID C9 9B
AD1F DO F9
AD21 84 8F
AD23 20 65 B8
AD26 4C 40 A8
STA
I NY
(TELN)i Y
CPY
#TEXLNG
BNE
XIN030
XIN035
JSR
DIN
CMP
#EOL
BNE
XIN035
XIN040
STY
TELN+3
JSR
CRSNOP
JMP
XAC024
BUFFER FULL?
NO.
YES — FLUSH TO EOL.
SAVE STRING END INDEX.
DISABLE CURSOR AGAIN (A = *9B
rn ArrCDT rnnF TO FINISH P
(
SAMXT
PILOT — H. B. STEWART
XOUT — WRITE COMMAND PROC
ESSOR /
AD29 A9 08
AD2B 20 B7 B1
AD2E DO 2B
XOUT
LDA
JSR
BNE
#OWR I T
SCNDEV
X0T090
AD30 86 AB
AD32 B 1 80
AD34 20 EO B7
AD37 FO 01
STX
LDA
JSR
BEQ
XTEMP
( I NLN ) / Y
CHKTRM
X0T005
AD39 C8
I NY
AD3A 20 43 B9
X0T005
JSR
TEXP
AD3D FO 1C
; *S*
LDA
BEQ
EXEC
X0T090
AD3F 84 AC
STY
XTEMP+1
XTEMP
TELN+2
AD4 1 A6 AB
AD43 A4 8E
LDX
LDY
AD45 C4 8F
AD47 FO 09
X0T010
CPY
BEQ
TELN+3
X0T020
AD49 B9 77 05
AD4C 20 16 B 1
AD4F C8
AD50 DO F3
LDA
JSR
I NY
TEXBUFi Y
DOUT
BNE
X0T010
AD52 A9 9B
AD54 20 16 B 1
X0T020
LDA
JSR
#EOL
DOUT
AD57 A4 AC
AD59 A9 00
LDY
LDA
XTEMP+ 1
#0
AD5B 60
X0T090
RTS
WRITE DIRECTION.
CONVERT I/O SPEC TO DEVICE INDEX.
ERROR.
SAVE I OCB INDEX.
TERMINATOR FOLLOWING DEVICE SPEC?
YES — DON'T ADVANCE INDEX.
NO — SKIP OVER SINGLE SEPARATOR.
REST OF STATEMENT IS A TEXT EXPRESSION.
EXECUTE MODE?
NO.
SAVE LINE INDEX.
GET I OCB INDEX.
START OF TEXT EXPRESSION EVALUATION.
DONE?
YES.
NO — PUT CHAR TO DEVICE.
i (BRA).
i TERMINATE RECORD.
; SET CC FOR NORMAL EXIT,
i RETURN WITH CC SET.
PILOT — H. B. STEWART
PILOT
H. B STEWART
i XDONE
— CLOSE
COMMAND
AD5C
A9
00
XDONE
LDA
#0
AD5E
20
B7
B 1
JSR
SCNDEV
AD61
DO
09
BNE
XDN090
AD63
A5
92
LDA
EXEC
AD65
FO
05
BEQ
XDN090
AD67
20
FD
BO
JSR
DCLOSE
AD6A
A9
00
LDA
#0
AD6C
XWT090
AD6C
60
XDN090
RTS
PROCESSOR
; INVALID OPEN CODE MEANS CLOSE,
i CONVERT DEVICE SPEC TO IOCB INDEX,
i ERROR.
; EXECUTE MODE?
; NO.
i YES — CLOSE IOCB & DEVICE.
; SET CC FOR NORMAL EXIT.
; RETURN WITH CC SET.
PILOT
H B. STEWART
COMMAND PROCESSOR
AD6D 20 92
AO 70 AS 92
A072 FO F8
A074 A2 13
6 84 AB
A078 A4 AB
A07A AS 93
A07C OS 94
A07E FO EC
A080 A4 14
A082 20 46 B8
A08S C4 14
AD87 FO F 9
A089 A9 FF
A08B 20 40 B6
A08E 4C 78 AD
JSR
EXP
LDA
BEQ
EXEC
XMT090
LDX
STY
•EXPSTK-DTAB
XTEMP
LDY
LDA
ORA
BEQ
XTEMP
EXPSTK
EXPSTHM
XWT090
LDY
RTCLOH+2
JSR
CPY
BEQ
ABRTCK
RTCL0K+2
XWT020
Cda
JSR
• -1
DADDS
JMP
XWT010
i THERE host be AN EXPRESSION FOLLOWING
I EXECUTE NODE?
i MO — ALL DOMI
t YES — WORK WITH COUNT
l SAVE LINE INDEX
4 RESTORE INDEX
l ALL DONE?
I YES
i NO — WAIT FOR
t ... OPERATOR ABORT . . .
i ... OR CLOCK TO CHANGE
COUNT
i>dc*x-
PILOT — H. B. STEWART
PILOT
H B STEWART
XCASS — CASSETTE ON/OFF COMMAND PROCESSOR
AD91
A2
ED
XCASS
LDX
#CCTAB-CTAB
l
CHECK FOR 'ON' OR 'OFF'.
AD93
20
10
A3
JSR
CMATCH
AD96
DO
09
BNE
XCA090
>
NOT FOUND — ERROR.
AD98
A5
92
LDA
EXEC
i
EXECUTE MODE?
AD9A
FO
05
BEQ
XCA090
i
NO.
AD9C
8E
02
D3
STX
PACTL
i
YES — ISSUE COMMAND.
AD9F
A9
00
LDA
#0
i
SET CC FOR NORMAL EXIT.
ADA1
60
XCA090
RTS
J
RETURN WITH CC SET.
i
i XCSYNC —
CASSETTE SYNC COMMAND
PROCESSOR
ADA2
FO
IB
i
XCSYNC
BEQ
XCS090
i
SYNTAX SCAN.
ADA4
AD
02
D3
LDA
PACTL
#
CHECK CASSETTE MOTOR.
ADA7
29
08
AND
#*08
ADA9
DO
12
BNE
XCS080
}
MOTOR OFF.
ADAB
A9
10
LDA
#*10
i
ON — WAIT FOR MARK TO SPACE
ADAD
20
46
B8
XCS010
JSR
ABRTCK
j
WAIT FOR BREAK . . .
ADBO
2C
OF
D2
BIT
SKSTAT
ADB3
FO
F8
BEQ
XCS010
#
... OR MARK.
ADB5
20
46
B8
XCS020
JSR
ABRTCK
#
WAIT FOR BREAK . . .
ADB8
2C
OF
D2
BIT
SKSTAT
ADBB
DO
F8
BNE
XCS020
i
... OR SPACE.
ADBD
A9
00
XCS080
LDA
#0
i
SET CC FOR NORMAL EXIT.
ADBF
60
XCS090
RTS
#
RETURN WITH CC SET.
i
i XTRACE —
TRACE MODE ON/OFF
COMMAND
ADCO
A2
ED
i
XTRACE
LDX
#CCTAB-CTAB
I
CHECK FOR 'ON' OR 'OFF'.
ADC2
20
10
A3
JSR
CMATCH
NOT FOUND — ERROR.
ADC 5
DO
OC
BNE
XTR090
i
ADC7
A5
92
LDA
EXEC
#
EXECUTE MODE?
ADC9
FO
08
BEQ
XTR090
i
NO.
ADCB
8A
TXA
i
YES — 'OFF' RESULTS IN . . .
ADCC
49
3C
EOR
#CASS0F-*80
i
... 0 IN REGISTER A.
ADCE
8D
75
05
STA
TRACE
i
SET FLAG.
ADD1
A9
00
LDA
#0
#
SET CC FOR NORMAL EXIT.
PILOT — H. B. STEWART
t
i XSAVE — SAVE COMMAND PROCESSOR
•
ADD4
20
9C
BO
XSAVE JSR
DNAME
j
ADD7
20
EE
B7
JSR
SKPSEP
J
•
ADDA
A5
92
LDA
EXEC
#
ADDC
FO
24
BEQ
■XSV090T-,
9
M
LX3-r£iL
•
ADDE
A2
30
LDX
#I0CB3
ADEO
A9
08
LDA
#0WR I T
9
#
ADE2
20
B7
BO
JSR
DOPEN
ADE5
A9
OB
LDA
#PUTC
9
#
ADE7
9D
42
03
STA
ICCOM, X
ADEA
A9
BO
LDA
#$S0+I0CB3
9
m
ADEC
8D
70
05
STA
CDEST
ADEF
20
30
AE
JSR
LISTER
9
•
ADF2
A2
30
LDX
#I0CB3
ADF4
20
FD
BO
JSR
DCLOSE
i
#
ADF7
A9
06
LDA
#EPUTC-IOVBAS i
ADF9
8D
70
05
STA '
CDEST
m
i *** EXTERNAL
ENTRY POINT
FROM '
m
ADFC
20
33
BF
XSV050 JSR
RDYMES
9
A DFF
A9
00
LDA
#0
9
NO.
; VES — OPEN DEVICE FOR OUTPUT.
; SETUP IOCB FOR PUT CHARACTER.
; RE-ROUTE 'CHOT' OUTPUT TO DEVICE.
; OUTPUT PROGRAM TO DEVICE.
; CLOSE DEVICE.
i RESTORE 'CHOT' OUTPUT.
SET CC FOR NORMAL EXIT.
AEOl
AEOl 60
XLD090
RTS
; RETURN WITH CC SET.
AE02 4C 30 AE (^XSV090 JMP
—
LISTER
; SYNTAX CHECK & RETURN WITH CC SET.
__
PILOT
H B. STEWART
i XLOAD — LOAD COMMAND PROCESSOR
i
AE05
20
7E B 1
XLOAD JSR
SFNAME
4
EXTRACT DEVICE/FILENAME
AE08
DO
F7
BNE
XLD090
i
ERROR.
0
AEOA
A5
92
LDA
EXEC
i
EXECUTE MODE?
AEOC
FO
F3
BEQ
XLD090
i
NO.
0
AEOE
A2
30
LDX
#I0CB3
AEIO
A9
04
LDA
#OREAD
i
YES — OPEN DEVICE FOR READING.
AE12
20
B7 BO
JSR
DOPEN
#
AE 1 5
8E
72 05
STX
LOADFG
l
SET LOAD FLAG.
AE18
A5
FF
LDA
RUN
#
RUN MODE LOAD?
#
AE1 A
FO
03
BEQ
XLD050
l
NO — IMMEDIATE (DON'T CLEAR PROGRAM)
AE1C
20
FF A9
JSR
CLRPRG
l
CLEAR PROGRAM STORAGE AREA.
•
AE1F
A 9
ocH
X*
XLD050** LDA
#0
i
CLEAR USE STACK.
AE21
%5
90
STA
USTKP
•
AE23
4C
9F AO
JMP
MLLOAD
i
LOAD UNTIL I/O ERROR OR END OF FILE.
9
SEE 'GETCOM'.
PILOT — H. B. STEWART
' XL I ST — LIST COMMAND PROCESSOR
AE26 20 30 AE
AE29 DO 04
AE2B A5 92
AE2D DO CD
AE2F 60
AE30 20 E8 A4
AE33 DO FA
AE35 C9 01
AE37 FO 3B
AE39
C9
02
AE3B
DO
16
AE3D
A5
B8
AE3F
85
DE
AE4 1
A5
B9
AE43
85
DF
AE45
20
EE B7
AE48
20
E8 A4
AE4B
DO
E2
AE4D
C9
01
AE4F
FO
ID
AE51
C9
02 '
AE53
DO
69
AE55
A5
B8
AE57
85
EO
AE59
A5
B9
AE5B
85
El
AE5D
84
AB
AE5F
A2
60
AE61
AO
5E
AE63
20
63 B5
AE66
08
AE67
A4
AB
AE69
28
AE6A
BO
16
AE6C
90
50
AE6E
A5
DE
AE70
A6
DF
AE72
BO
OA
AE74
A9
00
AE76
85
DE
; *** EXTERNAL ENTRY POINT FROM
XLIST
XSAVE ' ***
LISTER
JSR
BNE
LISTER
XLS009
i DO THE LIST PROCESS,
i ERROR.
LDA
BNE
EXEC
XSV050
i EXECUTE MODE?
; YES — SIGN OFF & RETURN.
RTS
; RETURN WITH CC SET.
JSR
BNE
ATOM
XLS009
i GET START LINE#,
i ERROR — RETURN.
CMP
BEQ
#NULL
XLS200
i NO START LINE #.
CMP
BNE
#NUM
XLS029
i SYNTAX ERROR.
LDA
STA
LDA
STA
NUMBER
LS
NUMBER+1
LS+1
; SAVE VALUE IN 'LS'.
JSR
JSR
BNE
SKPSEP
ATOM
XLS009
i SKIP SEPARATOR.
; GET ENDING LINE #.
; INVALID ATOM.
CMP
BEQ
#NULL
XLS180
; NO END LINE #.
CMP
BNE
#NUM
XLS900
; SYNTAX ERROR (SKIP BRANCH
LDA
number
j SAVE VALUE IN 'LE'.
STA
LDA
STA
XLS180
XLS200
BCC
LDA
LDX
BCS
LDA
STA
LE
NUMBER+1
LE+1
XTEMP
#LE-DTAB
#LS-DTAB
; CHECK FOR END >= START.
DCMPI
XTEMP
XLS235
; END >- START.
XLS900
; END < START.
LS
; FORCE END = START.
LS+1
XLS230
} (BRA).
#0
LS
i DEFAULT — START :
PILOT
H B STEWART
AE78 83 DF
AE7A A9 OF
AE7C A2 27
AE7E 85 EO
AE80 86 El
AE82 A3 92
AE84 FO 3A
AE86 84 AB
AE88 A 5 AE
AE8A 85 B6
AE8C A5 AF
AE8E 85 B7
AE90 A2 36
AE92 20 9D B3
AE95 FO 22
AE97 20 54 B8
AE9A A2 5C
AE9C AO 5E
AE9E 20 63 B5
AEA1 90 OE
AEA3 A2 60
AEA5 AO 5C
AEA7 20 63 B5
AEAA 90 OD
AEAC AO 36
AEAE 20 09 B8
AEB 1 A2 36
AEB3 20 10 B4
AEB 6 4C 90 AE
AEB9 A4 AB
AEBB A9 00
XLS230
XLS240
XLS2S0
XLS260
STA
LS+l
LDA
»MAXLN
LDX
#MAXLN/256
STA
LE
STX
LE + 1
LDA
EXEC
BEQ
XLS990
STV
XTEMP
LDA
S1L
STA
POINT
LDA
S1L+1
STA
POINT+1
LDX
#PQINT-DTAB
JSR
SEND
BEQ
XLS260
JSR
GTLNNO
LDX
#L INENO-DTAB
LDY
#LS-DTAB
JSR
DCMPI
BCC
XLS250
LDX
#L„E-DTAB
LDY
#L INENO-DTAB
JSR
DCMPI
BCC
XLS260
LDY
#POINT~DTAB
JSR
PSF
LDX
#POINT-DTAB
JSR
SNXTI
JMP
XLS240
LDY
XTEMP
LDA
#0
AEBD 60
RTS
AEBE A9 02
XLS900 LDA
#IMPERR
AECO 60
XLS990 RTS
PTI HT U 13 QTPIJAPT
DEFAULT
END
9999
EXECUTE MODE?
NO.
SETUP 'POINT ' TO POINT TO PROGRAM STORAGE.
CHECK FOR END OF STATEMENT LIST.
DONE.
MOVE LINE # TO 'LINENO' (USES 'POINT')
SEE IF >= START LINE.
NO — DON'T PRINT.
SEE IF <= END LINE.
NO — DONE.
PRINT STORAGE FORM LINE.
ADVANCE TO NEXT LINE.
SET CC FOR NORMAL EXIT.
RETURN WITH CC SET.
IMPROPER PARAMETER ERROR.
RETURN WITH CC SET.
PILOT
H. B. STEWART
i
i XAUTO — AUTO
i
XAUTO JSR
-INPUT COMMAND
AEC1
20
DA
AE
NUMNUM
AEC4
DO
13
BNE
XAU090
AEC6
A5
92
LDA
EXEC
AEC8
FO
OF
BEQ
XAU090
AECA
8D
76
05
STA
AUTOIN
AECD
A5
86
LDA
AC0L.R2
AECF
8D
C6
02
STA
C0L0R0+2
AED2
A5
87
LDA
AC0LR1
AED4
8D
C5
02
STA
COLORO+l
AED7
A9
00
LDA
#0
AED9
60
XAU090 RTS
AEDA
A9
00
NUMNUM LDA
#0
AEDC
85
FA
STA
AL INE+1
AEDE
85
FC
STA
AINC+1
AEEO
A9
OA
LDA
#10
AEE2
85
F9
STA
ALINE
AEE4
85
FB
STA
AINC
AEE6
20
E8
A4
JSR
ATOM
AEE9
DO
33
BNE
NMN990
AEEB
C9
01
CMP
#NULL
AEED
FO
2C
BEQ
NMN090
AEEF
C9
02
CMP
#NUM
AEF 1
DO
29
BNE
NMN900
AEF3
A5
B8
LDA
NUMBER
AEF5
85
F9
STA
ALINE
AEF7
A5
B9
LDA
NUMBER+1
AEF9
85
FA
STA
AL INE+1
AEFB
20
EE
B7
JSR
SKPSEP
AEFE
20
E8
A4
JSR
ATOM
AF01
DO
IB
BNE
NMN990
AF03
C9
01
CMP
#NULL
AF05
FO
14
BEQ
NMN090
AF07
C9
02
CMP
#NUM
AF09
DO
11
BNE
NMN900
AFOB
A5
B8
LDA
NUMBER
AFOD
85
FB
STA
AINC
AFOF
A5
B9
LDA
NUMBER* 1
AF1 1
85
FC
STA
AINC+1
AF13
30
07
BMI
NMN900
AF 1 5
05
FB
ORA
AINC
AF1 7
FO
03
BEQ
NMN900
PROCESSOR
i GET LINE # AND INCREMENT.
» ERROR.
j EXECUTE MODE?
i NO.
t YES — SET AUTO-INPUT MODE.
i SET SCREEN BACKGROUND COLOR.
> SET SCREEN LETTER COLOR.
j SET CC FOR NORMAL EXIT.
> RETURN WITH CC SET.
i SETUP DEFAULT VALUES.
) LINE # 8< INCREMENT « 10.
i GET STARTING LINE #.
) ERROR.
i DEFAULT TO 10, 10.
i SYNTAX ERROR.
i SET VALUE IN 'ALINE'.
i SKIP SEPARATOR ( S ) .
i GET LINE # INCREMENT.
i ERROR.
i DEFAULTS TO XX, 10.
; SYNTAX ERROR.
i SET VALUE IN 'AINC'.
; NEGATIVE INCREMENT IS ILLEGAL.
i TEST FOR ZERO INCREMENT,
j ZERO — ERROR.
PILOT
H. B. STEWART
(,
y
AF19
A9
00
LDA
#1
AF1B
60
NMN090
RTS
AF1C
A9
02
NMN900
LDA
0
AF1E
60
NMN990
RTS
#0
# I MPERR
i SET CC FOR NORMAL EXIT,
i RETURN WITH CC SET
i IMPROPER PARAMETER ERROR
; RETURN WITH CC SET.
PILOT
H. B. STEWART
; XREN — RENUMBER COMMAND PROCESSOR
AF1F 20 DA AE
XREN
JSR
NUMNUM
j
GET LINE # AND INCREMENT
AF22 DO 3B
BNE
XNU090
9
ERROR.
AF24 A5 92
LDA
EXEC
i
EXECUTE MODE?
AF26 FO 37
BEQ
XNU090
#
NO.
AF2S 84 AB
STY
XTEMP
i
SAVE LINE INDEX.
AF2A A5 AE
LDA
SI L
9
SETUP POINTER TO PROGRAM STORAGE AREA
AF2C 85 B6
STA
POINT
AF2E A5 AF
LDA
S1L+1
AF30 85 B7
STA
POINT+1
AF32 A2 36
XNU010
LDX
#POINT-DTAB
9
END OF PROGRAM?
AF34 20 9D B3
JSR
SEND
AF37 FO IF
BEQ
XNU080
9
YES — DONE.
AF39 A2 79
LDX
#ALINE-DTAB
i
CHECK FOR LINE # IN RANGE.
AF3B 20 63 AF
JSR
CHKLN
AF3E BO 20
BCS
XNU190
9
OUT OF RANGE.
AF40 AO 03
LDY
#3
9
NO — ALTER NUMBER.
AF42 A5 FA
LDA
ALINE+1
AF44 91 B6
STA
(POINT), Y
AF46 CB
I NY
AF47 A5 F9
LDA
ALINE
AF49 91 B6
STA
(POINT), Y
AF4B AO 7B
LDY
#AINC— DTAE
9
INCREMENT LINE NUMBER.
AF4D 20 80 B5
JSR
DADDI
AF50 A2 36
LDX
#PQINT-DTAB
9
NEXT STATEMENT.
AF52 20 10 B4
JSR
SNXTI
AF55
4C
32
AF
JMP
XNU010
AF58
20
33
BF
XNU080
JSR
RDYMES
i GENERATE "READY" MESSAGE
AF5B
A4
AB
LDY
XTEMP
; RESTORE LINE INDEX.
AF5D
A9
00
LDA
#0
i SET CC FOR NORMAL EXIT.
AF5F
60
XNU090
RTS
; RETURN WITH CC SET.
AF60
A4
AB
XNU190
LDY
XTEMP
; RESTORE LINE INDEX.
AF62
60
RTS
i RETURN WITH CC SET.
; CHKLN
9
CHECK STATEMENT LINE
# FOR OUT OF RANGE.
i CALLING SEQUENCE:
9
i X = DTAB INDEX
TO LINE 1
NUMBER.
9
9
JSR
CHKLN
9
BCS
OUT OF
RANGE (A
= ERROR CODE)
AF63
AO
27
9
CHKLN
LDY
#MAXLN+l/256
AF65
A9
10
LDA
#MAXLN+1
PILOT
H. B STEWART
PILOT
H. B
STEWART
I/O SUBSYTEM ROUTINES
CHOT — PRINT ONE CHARACTER TO "E:
A = ATASCII CHARACTER
'CDEST ' ■ I/O ROUTINE OFFSET OR *80+XX OR *FF.
JSR CHOT
AF6F
86
A1
CHOT
STX
TEMP
I
SAVE REGISTERS.
AF7 1
84
A2
STY
TEMP+1
AF73
AE
70
05
LDX
CDEST
i
PREPARE TO OUTPUT TO DEVICE.
AF76
30
OE
BMI
CHOI 00
i
SPECIAL OUTPUT.
AF78
20
73
B 1
JSR
IOHAND
; |
EXTERNAL
ENTRY POINT ***
AF7B
CO
00
IOERCK
CPY
#0
i
ERROR CHECK.
AF7D
10
1A
BPL
CHOI 20
#
0. K.
; |
EXTERNAL
ENTRY POINT ***
AF7F
84
E4
I0E010
STY
IOSTAT
#
SAVE I/O STATUS.
AF81
A9
86
LDA
# I OERR
AF83
4C
6C
A 1
JMP
PSTOP
#
STOP ON ERROR.
AF86
EO
FF
CH0100
CPX
#*FF
9
RESULT TO 'TEXBUF '?
AF88
FO
05
BEQ
CHOI 10
#
YES.
AF8A
A2
30
LDX
#1 QCB3
/
NO — TO IOCB 3.
AF8C
4C
21
B 1
JMP
DI0005
9
OUTPUT CHARACTER AND RETURN.
AF8F
A4
8F
CHOI 10
L.DY
TELN+3
9
GET INDEX.
AF91
CO
FE
CPY
#TEXLNG
9
BUFFER FULL?
AF93
FO
04
BEQ
CH0120
9
YES — STORE NO MORE.
AF95
91
8C
STA
( TEL-N > / Y
#
NO — STORE CHARACTER.
AF97
E6
8F
INC
TELN+3
AF99
A4
A2
CH0120
LDY
TEMP+1
9
RESTORE REGISTERS.
AF9B
A6
A1
LDX
TEMP
AF9D
60
RTS
GETLIN — GET LINE FROM "E: "
CALLING SEQUENCE:
X = OFFSET TO BUFFER ADDRESS.
JSR
GETLIN
PILOT
H B STEWART
DTAB < X+2 )
DTAB ( X+3 )
O — START INDEX.
LINE LENGTH — END INDEX.
AF9E 86
A3
GETLIN
STX
TEMP+2
#
SAVE INDICES
AFAO 84
A4
STY
TEMP+3
AFA2 A9
00
LDA
#0
i
ENABLE TEXT CURSOR
AFA4 95
82
STA
DTAB+2, X
i
AS ADVERTISED.
AFA6 20
65
B8
JSR
CRSNQP
i
MAKE CURSOR SHOW NOW.
AFA9 B 5
80
LDA
DTAB, X
#
SETUP BUFFER ADDRESS.
AFAB 8D
44
03
STA
IOCBO+ICBAL
AFAE B5
81
LDA
DTAB+1 , X
AFBO 8D
45
03
STA
IOCBO+ICBAH
AFB3 A9
05
LDA
#GETR
i
GET RECORD COMMAND.
AFB5 8D
42
03
STA
IOCBO+ICCOM
AFB8 A9
79
GTL010
LDA
#L I NLNG- 1
#
SETUP MAXIMUM LINE LENGTH
AFBA 8D
48
03
STA
I OCBO+ ICBLL
AFBD A2
00
LDX
# I OCBO
IOCB 0.
AFBF 8E
49
03
STX
IOCBO+ICBLH
•M-S*.
AFC2 20
56
E4
JSR
CIO
DO I/O.
. IF
DEBUG
CP Y
#*B9
#
TRUNCATED RECORD?
BNE
GTL020
i
NO.
LDA
#OLLERR
#
YES — INFORM OPERATOR &
JSR
MESSOT
JMP
GTL010
. END IF
AFC 5 98
GTL020 TYA
m
AFC6 30 B7
BMI
I0E010
#
AFC8 20 65 B8
JSR
CRSNOP
t
0
AFCB A6 A3
LDX
TEMP+2
i
AFCD A4 A4
LDY
TEMP+3
#
AFCF AD 48 03
LDA
IOCBO+ICBLL
*
AFD2 95 83
STA
DTAB+3, X
AFD4 60
RTS
#
ERROR.
; DISABLE TEXT CURSOR (A O 0)
i RESTORE INDICES.
; SETUP END INDEX.
AFD5 84 A7
GSOPEN
OPEN THE GRAPHICS SCREEN
i THIS ROUTINE COMPRESSES MEMORY/ OPENS THE GRAPHICS SCREEN AND DE COMPRESSES
i THE MEMORY AGAIN.
GSOPEN STY
TEMP2
SAVE LINE SCAN INDEX.
; FIRST COMPRESS THE RAM STORAGE, LEAVING THE FREE AREA AT THE HIGH ADDRESSES
; BY REMOVING THE GAP BETWEEN THE PROGRAM STORAGE AREA AND THE STRING
; STORAGE AREA.
PILOT
H. B. STEWART
PILOT
H. B STEWART
AFD7
A5
BO
AFD9
85
D8
AFDB
A5
B 1
AFDD
85
D9
AFDF
A5
B2
AFE1
85
D6
AFE3
A5
B3
AFE5
85
D7
AFE7
38
AFE8
A5
B4
AFEA
E5
B2
AFEC
85
DA
AFEE
85
A8
AFFO
A5
B5
AFF2
E5
B3
AFF4
85
DB
AFF6
85
A9
AFF8
18
AFF9
A5
BO
AFFB
65
DA
AFFD
85
OE
AFFF
A5
B 1
BOOl
65
DB
B003
85
OF
BOOS
20
OC
B5
B008
A9
53
BOOA
8D
60
05
BOOD
A9
9E
BOOF
8D
61
05
B012
A9
1C
BOl 4
8D
6A
03
B017
AD
FI
06
BOl A
8D
6B
03
BOID
A9
03
BOIF
8D
62
03
B022
A2
20
B024
20
48
B 1
B027
20
56
E4
B02A
84
E4
B02C
30
24
B02E
CE
FO
02
B031
A9
46
B033
8D
C4
02
B036
A9
1A
B038
8D
C5
02
B03B
20
B9
BE
LDA
S1H
STA
MDP
LDA
S1H+1
STA
MDP + 1
LDA
S2L
STA
MSP
LDA
S2L+1
STA
MSP + 1
SEC
LDA
S2H
SBC
S2L
STA
MBC
STA
TEMP2+1
LDA
S2H+1
SBC
S2L+1
STA
MBC + 1
STA
TEMP2+2
CLC
LDA
S1H
ADC
MBC
STA
APPMHI
LDA
S1H+1
ADC
MBC+1
STA
APPMHI. + 1
JSR
MOV I A
' MDP
'SI H 7 (DESTINATION)
'MSP 7 = 7
S2L 7 (SOURCE)
i 'MBC 7 = 7 S2H 7 - 7 S2L 7 (BYTE COUNT)
i ( 7 TEMP2 7 +1 = SAME).
(SAVE FOR LATER)
APPMHI 7 = 7 S1H 7 + 7 MBC
NOW ATTEMPT TO OPEN 7 S:
ENOUGH MEMORY * HOWEVER.
i MOVE STRING STORAGE DOWN.
TO THE DESIRED SCREEN MODE; THERE MAY NOT BE
; DEVICE NAME = 7 S 7 .
LDA #'S
STA OPNBUF
L.DA #EOL
STA OPNBUF+1
LDA #OWRIT+OREAD+SPLIT ; SCREEN OPTIONS.
STA I0CB2+ICAUX 1
LDA GSMODE
STA I0CB2+ICAUX2
LDA #OPEN
STA I0CB2+ICC0M
LDX #I0CB2
JSR BUFPNT
JSR CIO
STY IOSTAT
BMI GS0020
DEC CRSINH
LDA #*46
STA COLORO+O
LDA #*1A
STA COLORO+1
LDA #*94
STA C0L0R0+2
JSR GPINIT
OPEN COMMAND.
OPEN DEVICE ON IOCB 2.
SETUP OPEN BUFFER POINTER.
SAVE STATUS FOR LATER.
ERROR — DON 7 T PLOT POINT.
INHIBIT THE CURSOR.
ESTABLISH ALTERNATE COLORS.
RED-
YELLOW (MUST HAVE VALUE *XA).
BLUE.
INITIALIZE GRAPHICS PARAMETERS.
PILOT
H. B. STEWART
B03E
AD
FI
06
LDA
GSMODE
i DEFAULT SCREEN MODE?
B04 1
C9
07
CMP
#SCNMOD
B043
DO
OD
BNE
GS0020
i NO DON'T PLOT CURSOR
B045
A2
00
LDX
#0
i SET CURSOR POSITION.
B047
AO
6C
LDY
#GX— DTAB
B049
20
96
BC
JSR
SETCUR
B04C
AD
53
05
LDA
PEN
B04F
20
3C
B 1
JSR
TOUT
i PLOT SINGLE POINT.
; NOW MOVE THE STRING STORAGE AREA
; THAT THE FREE AREA IS ONCE AGAIN
; THE STRING STORAGE AREA.
UP TO THE CURRENT TOP OF MEMORY SO
BETWEEN THE PROGRAM STORAGE AREA AND
B052 A5 AS
GS0020
LDA
TEMP2+1
B054 85 DA
STA
MBC
B056 A5 A9
LDA
TEMP2+2
B058 85 DB
STA
MBC + 1
E05A A5 BO
LDA
S1H
B05C 85 D6
STA
MSP
BOSE A5 B1
LDA
S1H+1
B060 85 D7
STA
MSP + 1
B062 20 77 BO
JSR
GS0100
B065 A4 E4
LDY
IOSTAT
B067 10 08
BPL
GS0090
B069 A2 20
LDX
# I 0CB2
B06B 20 FD BO
JSR
DCLOSE
B06E 4C 7F AF
JMP
I0E010
B07 1 A4 A 7
GS0090
LDY
TEMP2
B073 8C 54 05
STY
GRFLAG
B076 60
RTS
■ 'MBC 7 = PRIOR 'MBC 7 (BYTE COUNT).
; "MSP 7 = 7 S 1 H 7 (SOURCE).
; DO FINAL SETUP AND MOVE.
; SEE IF THERE WAS AN I/O ERROR,
i NO.
. YES — CLOSE DEVICE & REPORT ERROR.
; RESTORE SCAN INDEX,
i SET GRAPHICS SCREEN FLAG.
B077 38
E078 AD E5 02
B07B 85 B4
B07D 85 OE
B07F E5 DA
B081 85 D8
B083 85 B2
B085 AD E6 02
B088 85 B5
B08A 85 OF
B08C E5 DB
B08E 85 D9
B090 85 B3
B092 A2 8E
B094 A9 FF
B096 20 4D B6
B099 4C 30 B5
; *** EXTERNAL ENTRY POINT FROM 'GEX IT 7 ***
GS0100 SEC
LDA MEMHI
STA S2H
STA APPMHI
SBC MBC
STA MDP
STA S2L
"MDP 7 = 7 MEMHI 7 - 'MBC 7 (DESTINATION).
7 S2H 7 * 'MEMHI 7 .
'S2L 7 = SAME AS NEW 7 MDP 7 .
LDA MEMHI+1
STA S2H+1
STA APPMHI+1
SBC MBC-*- 1
STA MDP+1
STA S2L+1
NOW AS ABOVE FOR MSB.
LDX #APPMHI-*-*100-DTAB ; DECRMENT 'APPMHI' BY ONE.
LDA #-l
JSR DADDS
JMP
MOVDA
i MOVE STRING STORAGE TO TOP OF MEM & RETURN.
PILOT
H. B. STEWART
V/ I M
i iu v L/n
* nuvc. BIKING UTURAGE TO TOP OF MEM «, RETURN
PILOT — H. B STEWART
B09C 20 FA B7
B09F A2 00
B0A1 B 1 80
B0A3 20 D8 B7
B0A6 FO 09
BOAS 9D 60 05
BOAB E8
BOAC C8
BOAD EO OF
BOAF DO FO
BOB 1 A9 9B
B0B3 9D 60 05
B0B6 60
B0B7 48
B0B8 20 FD BO
BOBB 68
BOBC OD 5D 05
BOBF 9D 4A 03
i
i DNAME — EXTRACT DEVICE/FILENAME
I
I CALLING SEQUENCE:
j
i Y » INDEX TO START OF NAME
J
i J SR DNAME
i
i Y » INDEX TO NAME DELIMITER.
i X =» 'OPNBUF ' INDEX TO CHAR AFTER NAME ( EOL ) .
I 'OPNBUF ' RECEIVES NAME
;
DNAME
JSR
SLB
i SKIP READING BLANKS.
) *S*
JMP
FNAME
J NAME TO 'OPNBUF' & RETURN
FNAME
LDX
#0
FNM010
LDA
( INLN ) i Y
JSR
CHKSEP
i SEPARATOR?
BEQ
FNM020
> YES — DONE.
STA
OPNBUF/ X
i NO — PART OF NAME.
I NX
INY
CPX
#DNS I ZE
) NAME TOO LONG?
BNE
FNM010
i NO — KEEP SCANNING.
FNM020
LDA
#EQL
} END OF NAME.
STA
OPNBUF/ X
RTS
i DOPEN — DEVICE OPEN
i
; CALLING SEQUENCE:
i
; ' IOEDIS ' O 0 INDICATES TO IGNORE I/O ERROR.
; X * IOCB INDEX.
i A = OPEN DIRECTION + AUX1 OPTIONS.
i 'OPNBUF' CONTAINS DEVICE/FILENAME.
i
; JSR DOPEN
i
i RETURNS ONLY IF OPEN SUCCEEDED.
i
DOPEN
PHA
j SAVE OPEN CODE.
JSR
PLA
DCLOSE
, *** JUST IN CASE ***.
i RESTORE OPEN CODE.
i *S*
STX
TEMP
i *S*
STY
TEMP+1
ORA
AUX 1
i MERGE USER BYTE.
STA
ICAUX1. X
; SETUP OPEN DIRECTION.
PILOT
H B STEWART
BOC2
20
6C
B2
JSR
CHKDEV
f
CHECK FOR INVALID OPEN
BOC9
AD
BE
09
LDA
AUX2
l
SETUP AUX2
B0C8
9D
4B
03
STA
ICAUX2. X
BOCB
A9
OO
LDA
•0
BOCD
9D
48
03
STA
ICBLL. X
l
SETUP FOR ACCUMULATOR XFER OF
BODO
9D
49
03
STA
ICBLH. X
B0D3
0D
9D
09
STA
AUX1
1
CLEAR USER BYTES
B0D6
8D
9E
09
STA
AUX2
B0D9
A9
03
LDA
#OPEN
j
OPEN COMMAND
BODB
9D
42
03
STA
I CCOM/ X
BODE
20
48
B 1
JSR
BUFPNT
i
SETUP OPEN BUFFER POINTER
B0E1
20
96
E4
JSR
CIO
j
JSR
COLORS
l
RE-ESTABLISH SPECIAL COLORS.
B0E4 10 26
*S*
TYA
BPL
D0P010
*** EXTERNAL ENTRY POINT ***
X = IOCB INDEX.
Y = ERROR STATUS ON ENTRY.
*** NEEDED ONLY IF OUTPUT TO S: OR E: ALLOWED
IN GRAPHICS MODE ***
CHECK STATUS.
O. K.
B0E6
AD
00 05
D0P005
LDA
IOEDIS
B0E9
08
PHP
BOEA
A9
9B
LDA
#EOL
BOEC
28
PLP
BOED
FO
08
BEQ
D0P007
BOEF
A5
FF
LDA
RUN
B0F1
08
PHP
B0F2
A9
9B
LDA
#EOL
B0F4
28
PLP
B0F5
DO
15
BNE
D0P010
B0F7
20
FD BO
D0P007
JSR
DCLOSE
BOFA
4C
7F AF
JMP
I0E010
ERROR STOP DISABLED?
(RETURN EOL CHAR ON ERROR).
NO.
YES — IS IT ALSO RUN MODE?
RETURN EOL ON ERROR.
YES.
NO — CLOSE FILE IN ERROR.
ERROR — STOP (SKIP BRANCH POINT)
BOFD 86 A1
DCLOSE — CLOSE IOCB
CALLING SEQUENCE:
X = IOCB INDEX
JSR DCLOSE
NOTE: CLOSE STATUS IS OF NO IMPORTANCE TO THIS ROUTINE.
DCLOSE STX TEMP
PILOT — H. B. STEWART
BOFF 84 A2
STY
TEMP+1
i NOTE: CLOSE STATUS IS OF NO IMPORTANCE TO THIS ROUTINE.
BOFD 86 A1 DCLOSE STX TEMP
PILOT — H. B. STEWART
BOFF
B 101
B 1 03
84
A9
9D
A2
OC
42
03
STY
LDA
STA
TEMP+1
#CLOSE
ICCOM, X
B 1 06
20
56
E4
JSR
CIO
B 109
20
72
B8
JSR
AUDCLR
B IOC
B IOC A6 A 1
BlOE A4 A2
B 1 10 60
i CLEAR AUDIO REGISTERS.
*** EXTERNAL ENTRY POINT ***
D0P010
DI0010 LDX
LDY
RTS
TEMP
TEMP+1
i RESTORE REGISTERS.
DIN & DOUT — I OCB DATA IN AND OUT
CALLING SEQUENCE:
'IQEDIS' O 0 INDICATES TO IGNORE I/O ERROR.
X = I OCB INDEX
A = DATA ('DOUT' ONLY)
JSR
DIN/DOUT
A «
DATA ( 'DIN'
Bill
B 1 12
B 1 1 4
48
A9
DO
07
03
DIN
PHA
LDA
BNE
#GETC
DI0003
B 1 16
B1 17
48
A9
OB
DOUT
PHA
LDA
#PUTC
B 1 19
B 1 1C
BUD
B11F
9D
68
86
84
42 03
A 1
A2
D I 0003
STA
PLA
STX
STY
ICCOM/ X
TEMP
TEMP+1
i SETUP COMMAND BYTE.
; (BRA).
SAVE DATA BYTE.
SETUP COMMAND BYTE.
SAVE REGISTERS.
B 121 20 56 E4
B 124 84 E4
B 126 10 E4
B 128 A9 9B
B12A CO 88
B12C DO B8
B12E FO DC
DI0005 JSR
>TY
*S«.
S'
CPY
BPL
LDA
CPY
BNE
BEG
CIO
IOSTAT
#0
D I 00 10
#EOL
#$88
D0P005
DI0010
SAVE I/O STATUS.
CHECK STATUS.
0. K.
RETURN EOL ON ERROR.
^ D -- F FATAL ? ERROR (SKIP BRANCH)
YES — RETURN EOL (BRA).
i
PILOT
H B STEWART
, TIN — GRAPHICS DATA INPUT
, CALLING SEQUENCE
#
i J SR TIN
i
i A ■ ONE GRAPHICS PIXEL
i
B 1 30
86
A 1
TIN
STX
TEMP
B 1 32
84
A2
STY
TEMP+1
B 1 34
A2
14
LDX
4SGETC- I OVBAS
B 1 36
20
73
B 1
JSR
IOHAND
B 1 39
4C
7B
AF
JMP
IOERCK
i SAVE REGISTERS.
i GET CHARACTER FROM 'S',
i CHECK FOR ERROR h RETURN
i TOUT — GRAPHICS DATA OUTPUT
j
i CALLING SEQUENCE:
I
i A = ONE GRAPHICS PIXEL
*
i
JSR
TOUT
B13C
86
A 1
J
TOUT
STX
TEMP
i
B13E
84
A2
STY
TEMP+ 1
B 1 40
A2
16
LDX
#SPUTC— IOVBAS
i
B 1 42
20
73
B 1
JSR
IOHAND
B 145
4C
7B
AF
JMP
IOERCK
j
SAVE REGISTERS.
PUT CHARACTER TO 'S: '.
CHECK FOR ERROR St RETURN.
B 1 48
A9
60
BUFPNT LDA
B14A
9D
44
03
STA
B14D
A9
05
LDA
B14F
9D
45
03
STA
B 1 52
60
RTS
#OPNBUF ; POINT TO NAME BUFFER FOR OPEN.
ICBAL# X
#0PNBUF/256
ICBAH, X
B 1 53 84 AA
B 155 B5 80
B 1 57 85 A 7
B 1 59 B5 81
B15B 85 AS
B15D B5 83
B15F 85 A9
B 161 B4 82
B 163 C4 A9
PRTSTG — PRINT TEXT DATA
CALLING SEQUENCE:
X = OFFSET TO TEXT DATA POINTER.
JSR PRTSTG
PRTSTG STY TEMP2+3
LDA DTAB, X i MOVE POINTER.
STA TEMP2
LDA DTAE + 1* X
STA TEMP2+1
LDA DTAB+3, X ; ENDING INDEX.
STA TEMP2+2
LDY DTAB+2, X i STARTING INDEX.
PRS010 CPY
TEMP2+2
; COMPARE START INDEX
WITH END INDEX.
PILOT — H. B. STEWART
B 165 FO 09
BEQ
PRS080
; EQUAL.
DONE.
B 163 C4
A9
PRS010
CPY
l / i n u ^ e» / a
TEMP2+2
i SlftKI 1IN« INDEX.
« COMPARE START INDEX WITH END INDEX
PILOT — H. B
STEWART
B 165 FO
09
BEQ
PRS080
J EQUAL — DONE.
B 167 B 1
B 169 C8
A7
LDA
INY
( TEMP2 ) / Y
i GET NEXT CHARACTER.
B16A 20
B16D 4C
6F AF
63 B 1
JSR
JMP
CHOT
PRS010
; PRINT CHARACTER.
B 1 70 A4
B 1 72 60
AA
PRS080
LDY
RTS
TEMP2+3
; IOHAND — DIRECT I/O TO INTERFACE ROUTINE
/
; CALLING SEQUENCE:
i
i
X = I/O
ROUTINE OFFSET
TO
ADDRESS TABLE ENTRY
i
JSR
IOHAND
i
t
i
CLOBBERS
Y REGISTER.
B 173
AS
IOHAND
TAY
#
SAVE REGISTER A.
B 1 74
BD
01
E4
LDA
IOVBAS+1, X
i
GET ADDRESS MSB.
B 1 77
48
PHA
B 1 78
BD
00
E4
LDA
IOVBAS+O, X
GET ADDRESS LSB.
B17B
48
PHA
B17C
98
TYA
t
RESTORE REGISTER A.
B17D
60
RTS
i
(JMP) TO HANDLER.
PILOT
H B STEWART
4
SENA ME OET DEVICE NAME AND STORE IN 'OPNBUF
CALLING SEQUENCE
EXEC • 0 FOR SCAN MODE. ELSE EXECUTE
- WUPMT 1 1*IF IfcinFK
- INDEX TO EOL IN 'OPNBUF'. V
SFNAME
ERROR < A
ERROR CODE).
'OPNBUF' - DEVICE NAME.
/jtX'JQt*- INPUT LINE INDEX TO FIELD AFTER DEVICE/FILENAME
B17E 20 E8 A4
SFNAME
JSR
ATOM
«
GET DEVICE/FILENAME
B 181 DO OA
BNE
SFN090
j
ERROR
B 183 C9 20
CMP
#TEXT
<
TEXT LITERAL?
B 189 FO 07
BEQ
SFN100
i
YES.
B 187 29 18
AND
#SVAR+USVAR
9
STRING NAME?
B 189 DO OB
BNE
SFN200
i
YES.
B18B A9 02
LDA
# I MPERR
9
NO — ERROR.
B18D 60
SFN090
RTS
9
RETURN WITH CC SET.
i SCAN
TEXT
LITERAL DATA TO
EXTRACT DEVICE/FILENAME.
B18E 20 9F BO
SFN100
JSR
FNAME
9
NAME TO 'OPNBUF'.
B191 84 F8
STY
XXXX
9
SAVE LINE INDEX.
B 193 A9 00
LDA
#0
9
SET CC FOR NORMAL EXIT.
B195 60
RTS
$
RETURN WITH CC SET.
; DEVICE/FILENAME IS A STRING VARIABLE VALUE
B 1 96 A5 92
SFN200
LDA
EXEC
9
EXECUTE MODE?
B 198 FO F3
BEQ
SFN090
9
NO — DONE.
B19A 84 F8
STY
XXXX
B19C A2 00
LDX
#0
B19E A4 C4
LDY
DP +2
B 1 AO C4 C5
SFN220
CPY
DP+3
9
DONE?
B1A2 FO OB
BEQ
SFN250
j
YES.
B1A4 B 1 C2
LDA
(DP), Y
i
NO — MOVE NAME.
B1A6 9D 60 05
STA
OPNBUF, X
B1A9 CS
INY
B1AA E8
I NX
B1AB EO OF
CPX
#DNSI ZE
9
OVERLENGTH NAME?
B 1 AD DO FI
BNE
SFN220
i
0. K. SO FAR.
B1AF A9 9B
SFN250
LDA
#EQL
B1B1 9D 60 05
STA
OPNBUF, X
B1B4 A9 00
LDA
#0
9
SET CC FOR NORMAL EXIT.
B1B6 60
RTS
9
RETURN WITH CC SET.
PILOT
H. B. STEWART
1
PILOT — H. B STEWART
B1EC 68
B1ED AA
B1EE A4 F8
B1FO A9 00
B1F2 60
SCNDEV — GET DEVICE NAME AND SETUP FOR 'READ: 'WRITE: ' OR 'CLOSE: '
CALLING SEQUENCE:
'EXEC' = 0 FOR SCAN MODE, ELSE EXECUTE
V = INPUT LINE INDEX.
A = AUX 1 OPEN CODE. (0 = CLOSE, ELSE OPEN).
; SAVE DEVICE OPEN CODE,
i EXTRACT FILENAME.
; ERROR.
; EXECUTE MODE?
; NO — ALL DONE.
; DELIMIT DEVICE NAME AS STRING NAME.
; CLEAR I/O STATUS.
i PREFIX NAME WITH '@
B1B7 85 EO
SCNDEV STA
LE
B1B9 20 7E B 1
JSR
SFNAME
B1BC DO 34
BNE
SCD290
B1BE A5 92
LDA
EXEC
B ICO FO 30
BEQ
SCD290
B1C2 A9 00
LDA
#0
B1C4 85 E4
STA
IOSTAT
B1C6 85 CO
STA
NP+2
B1C8 E8
I NX
B1C9 86 Cl
STX
NP+3
B1CB A9 40
LDA
#'@
B1CD 8D 5F 05
STA
OPNBUF-1
B IDO A9 5F
LDA
#0PNBUF~1
B1D2 85 BE
STA
NP
B1D4 A9 05
LDA
#OPNBUF- 1/256
B1D6 85 BF
STA
NP + 1
B1D8 20 9B B7
JSR
SETSVL
B1DB 20 81 B2
JSR
SFIND
BIDE DO 13
BNE
SCD300
B1E0 A4 C4
LDY
DP+2
B1E2 B 1 C2
LDA
(DP), Y
B1E4 48
PHA
B1E5 A5 EO
LDA
LE
B1E7 DO 03
BNE
SCD270
B1E9 20 9F B2
JSR
SDELET
SETUP TO ACCESS STRING VARIABLE LIST.
SEE IF STRING EXISTS.
NO.
; YES — GET IOCB INDEX FROM VALUE.
; LOOK AT "OPEN" CODE.
; NORMAL IN OR OUT.
; 'DONE' — DELETE NAME.
SCD270
XXXX
#0
SCD290 RTS
; SET CC FOR NORMAL EXIT.
; RETURN WITH CC SET.
B1F3
20
6C
B2
SCD300
JSR
CHKDEV
•
B1F6
A5
EO
LDA
LE
B1F8
DO
05
BNE
SCD310
#
B1FA
A4
F8
LDY
XXXX
B1FC
A9
02
LDA
#IMPERR
B1FE
60
RTS
t
BIFF
20
26
B2
SCD310
JSR
FNDIOB
«
B202
DO
21
BNE
SCD900
; FIRST ACCESS TO DEVICE, DO IMPLICIT OPEN.
; CHECK FOR VALID DEVICE.
; CHECK "OPEN" CODE.
i NORMAL IN OR OUT.
; RESTORE INDEX.
; 'DONE' — CLOSING NON-OPEN FILE.
; FIND A FREE IOCB, IF AVAILABLE.
; NONE AVAILABLE.
PILOT
H B STEWART
0304 A9 EO
8206 20 B7 BO
0209 86 OE
B20B BE FO 02
B20E A9 D£
B210 89 C2
B212 A 9 00
B214 89 C3
i *S*
8216 89 C4
B218 A9 01
B21A 89 C 9
B21C 20 B8 B2
B21F 08
B220 A6 DE
B222 A4 F8
B224 28
B229 60 SCD900
i FNDIOB
LDA
LE
1
JSR
DOPEN
1
STX
LS
i
STX
CRSINH
i
LDA
*LS
STA
DP
LDA
•LS/296
STA
DP* 1
LDA
•0
STA
DP *2
LDA
• 1
STA
DP *3
JSR
SINSRT
i
PHP
LDX
LS
LDY
xxxx
PLP
RTS
i
— FIND A FREE IOCB
GET AUX 1 OPEN CODE
OPEN DEVICE
SAVE IOCB • ASSOCIATED WITH DEVICE
INHIBIT CURSOR JUST IN CASE
INSERT NAMED STRING CONTAINING INFO
RETURN WITH CC SET.
i CALLING SEQUENCE:
i
i
JSR
FNDIOB
»
i
i
i
FNDIOB
BNE
NO FREE IOCB
(A =
ERROR CODE)
X = =
IOCB INDEX.
B226
A2
40
LDX
# I 0CB4
i
START WITH IOCB #4.
B228
B22B
BD
C9
40
FF
03
FND010
LDA
CMP
ICHID/ X
#$FF
i
TEST FOR CURRENTLY
UNUSED
B22D
FO
07
BEQ
FND090
i
FOUND ONE.
B22F
B232
20
DO
42
F4
B2
JSR
BNE
NXTIOB
FND010
9
9
BUMP INDEX TO NEXT
MORE TO CHECK.
IOCB.
B234
A9
96
LDA
#FILERR
9
NONE AVAILABLE.
B236
60
FND090
RTS
9
RETURN WITH CC SET.
B237 A2 30
; CLOSEM — CLOSE IOCBS 3 THROUGH 7 (WHETHER OPEN OR NOT).
I
CLOSEM LDX #I0CB3 ; START WITH IOCB #3.
B239
20
FD
BO
CLM010 JSR
DCLOSE
B23C
20
42
B2
JSR
NXTIOB
B23F
DO
F8
BNE
CLM010
CLOSE THE IOCB.
BUMP INDEX TO NEXT IOCB.
MORE TO DO.
PILOT — H. B. STEWART
B241 60
RTS
B23F DO F8
I IUIM- I u t-r w .
<% PILOT
H. B. STEWART
I
B241 60
RTS
t
NXTIOB — BUMP INDEX TO NEXT I0CB.
CALLING SEQUENCE:
X = I OCB INDEX
#
#
B242 8A NXTIOB
B243 18
B244 69 10
B246 AA
B247 EO 80
JSR NXTIOB
BEQ INDEX PAST IOCB #7
X = IOCB INDEX TO NEXT IOCB
TXA
CLC
ADC #IOCBSZ
TAX
CPX #I0CB7+I0CBSZ
B249
B249
B249 60
RDV090
CKD090
RTS
RETURN WITH CC SET.
REMDEV — REMOVE DEVICE ASSIGNMENTS FROM STRING LIST
B24A
B24C
B24E
A2
AO
20
52
3A
CF
B3
RDVOOO
LDX
LDY
JSR
#MEMA-DTAB
#LP-DTAB
DMOVI
i
REMOVE STRING VAR FROM LIST.
B251
20
A4
B4
JSR
MDEALL
B254
B257
20
A2
9B
3A
B7
REMDEV
JSR
LDX
SETSVL
#LP-DTAB
i
9
SETUP TO SCAN STRING VARIABLES
TO REMOVE ALL DEVICE ASSIGNMENTS
B259
B25C
20
FO
9D
EB
B3
RDV010
JSR
BEQ
SEND
RDV090
9
9
END OF LIST?
YES.
B25E
B260
B262
B264
AO
B 1
C9
FO
03
BA
40
E4
LDY
LDA
CMP
BEQ
#3
( LP ) > Y
#
RDVOOO
9
9
9
NO — LOOK AT 1ST CHARACTER OF NAME.
IS IT '©' (I/O ASSIGNMENT)?
YES — REMOVE IT FROM LIST.
B266
B269
20
4C
10
59
B4
B2
JSR
JMP
SNXTI
RDV010
9
GO TO NEXT ITEM IN LIST.
B26C AD 54 05
B26F FO D8
; CHKDEV — CHECK FOR VALID DEVICE
CHKDEV LDA GRFLAG
BEQ CKD090
GRAPHICS SCREEN?
NO — NO RESTRICTIONS.
B27 1 AD 60 05
B274 C9 45
LDA
CMP
OPNBUF
# 'E
; CHECK FOR ' E ' OR 'S'.
jgpF. |
wmm
PILOT
H B. STEWART
B276 FO 04
B278 C9 53
B27A DO CD
B27C A9 89
B27E 4C 6C A1
BEQ
CKD010
*
CMP
#'S
BNE
CKD090
LDA
KSCNERR
JMP
PSTOP
i INVALID -
CLOBBERS SCREEN
PILOT
H. B. STEWART
/
i
i
i
i
i
THIS PACKAGE HAS THREE LEVELS OF STRING HANDLING ROUTINES:
NAMED STRING HANDLING — SFIND, SDELET & SINSRT
TEXT DATA HANDLING — SCOMP
IMPLEMENTATION UTILITIES — IFIND, SEND, PSETUP, PMOVE, ICOMP,
ILENG, SNXTI, I MATCH Zt I ALLOC
PILOT
H B STEWART
i NAMED STRING HANDLING
i
i THESE ROUTINES USE THE FOLLOWING VARIABLES:
i
i NP - POINTER TO STRING NAME.
» DP - POINTER TO STRING DATA PORTION.
LP - POINTER TO START OF LIST OF NAMED STRINGS (S1L OR S2L )
'• SFIND — FIND NAMED STRING IN LIST
i
CALLING SEQUENCE:
LP POINTS TO START OF LIST OF NAMED STRINGS
NP POINTS TO NAME TO FIND IN LIST
JSR SFIND
BNE NAME NOT IN LIST OR NAME IS NULL
DP POINTS TO DATA PORTION OF NAMED STRING FOUND IN LIST
B281 20 FE
B2
SFIND
JSR
IFIND
i
FIND NAME IN LIST.
B284 DO 18
BNE
SF I 080
i
NOT FOUND.
B286 A2 42
LDX
#DP— DTAB
i
SET 7 DP ' TO POINT TO DATA
B288 AO 4E
LDY
#PP— DTAB
B28A 20 CF
B3
JSR
DMOVI
B28D A5 D1
LDA
PP+3
>
SKIP OVER NAME PORTION.
B28F 20 51
B6
JSR
DADDP
\
B292 A9 01
LDA
#1
#
SET START INDEX.
B294 85 C4
STA
DP+2
B296 AO 00
LDY
#0
i
SET END INDEX.
B298 18
CLC
B299 71 C2
ADC
(DP), Y
B29B 85 C5
STA
DP+3
B29D 98
TYA
9
SET CC FOR EXIT.
B29E 60
SFI080
RTS
9
RETURN WITH CC SET.
PORTION
; SDELET — DELETE NAMED STRING FROM LIST
9
; CALLING SEQUENCE:
i
i NP POINTS TO STRING NAME
; LP POINTS TO START OF LIST OF NAMED STRNGS
(
i JSR SDELET
BNE NAMED STRING NOT FOUND OR NAME IS NULL
PILOT
H. B. STEWART
JSR SDELET
BNE NAMED STRING NOT FOUND OR NAME IS NULL
PILOT — H. B. STEWART
B29F
20
FE
B2
SDELET
JSR
IFIND
)
FIND STRING IN LIST.
B2A2
DO
13
BNE
SDL090
I
NAMED STRING NOT FOUND.
i •#•*#
EXTERNAL
ENTRY POINT ***
B2A4
A2
52
SDEL2
LDX
#MEMA~DTAB
i
MEMA = PP < FOR DEALLOCATE CALL)
B2A6
AO
4E
LDY
#PP-DTAB
B2AS
20
CF
B3
JSR
DMOVI
B2AB
20
A4
B4
JSR
MDEALL
#
DELETE STRING.
B2AE
A2
4E
LDX
#PP-DTAB
i
PP " MEMA.
B2B0
AO
52
LDY
4MEMA-DTAB
B2B2
20
CF
B3
JSR
DMOVI
B2B5
A9
00
LDA
#0
SET CC FOR NORMAL EXIT.
B2B7
60
SDL090
RTS
i
RETURN WITH CC SET.
SINSRT — NAMED STRING INSERT
CALLING SEQUENCE:
NP POINTS TO STRING NAME
DP POINTS TO STRING DATA PORTION
LP POINTS TO START OF NAMED STRING LIST
JSR SINSRT
BNE NAME IS NULL# OR NO ROOM FOR STRING IN LIST
B2B8 20 FE B2
SINSRT
JSR
IFIND
B2BB DO 03
BNE
SIN020
B2BD 20 A4 B2
JSR
SDEL2
B2C0 A9 00
SIN020
LDA
#0
B2C2 85 D4
STA
MEMB
B2C4 85 D5
STA
MEMB+1
B2C6 A2 54
LDX
#MEMB-DTAB
B2C8 38
SEC
B2C9 A5 Cl
LDA
NP+3
B2CB E5 CO
SBC
NP+2
B2CD 20 51 B6
JSR
DADDP
B2D0 38
SEC
B2D1 A5 C5
LDA
DP +3
B2D3 E5 C4
SBC
DP+2
B2D5 20 51 B6
JSR
DADDP
B2D8 A9 04
LDA
#4
B2DA 20 51 B6
JSR
DADDP
B2DD A2 52
LDX
#MEMA“DTAB
B2DF AO 4E
LDY
#PP-DTAB
B2E1 20 CF B3
JSR
DMOVI
; IS NAME ALREADY IN LIST?
; NO.
; YES — DELETE OLD OCCURRENCE.
; CALCULATE ALLOCATION SIZE.
; STRING SIZE = NAME SIZE ...
; . . . + DATA PORTION SIZE . . .
; ... +4 BYTES OF OVERHEAD.
; ALLOCATE ADDRESS FROM 7 IF IND 7 CALL IN PP
PILOT
H. B. STEWART
B2E4 20 27 B4
B2E7 DO OE
^SR MALLOC
BNE SIN090
ALLOCATE SPACE. IN LIST
NOT ENOUGH ROOM.
B2E9 A2 3E
B2EB AO 02
B2ED 20 DA B3
LDX #NP— DTAB
LDY #2
JSR SMOVI
MOVE NAME TO NEW STRING
. . . STARTING AFTER ALLOCATION SIZE.
B2F0 A2 42
B2F2 20 DA B3
LDX #DP— DTAB ; NOW MOVE DATA PORTION
JSR SMOVI
B2F5 A9 00
LDA #0
SET CC FOR NORMAL EXIT.
B2F7 60
SIN090 RTS ; RETURN WITH CC SET.
PILOT
H. B. STEWART
TEXT DATA UTILITIES
THESE ROUTINES USE THE FOLLOWING VARIABLES:
DP = POINTER TO TEXT DATA
MP = POINTER TO TEXT PATTERN DATA
API = AUXILLIARY POINTER TO TEXT SUB-STRING
AP2 = AUXILLIARY POINTER TO TEXT SUB-STRING
#
SCOMP — COMPARE TWO TEXT STRINGS
CALLING SEQUENCE:
DP POINTS TO DATA TEXT
MP POINTS TO DATA TEXT
JSR SCOMP
BEQ DATA TEXTS ARE IDENTICAL
BCS DP TEXT >= MP TEXT
BCC DP TEXT < MP TEXT
B2FS 20 B7 B3
B2FB 4C 34 B3
NOTE: THE COMPARISON IS BASED UPON THE STANDARD ATASCII COLLATION
SEQUENCE; WHEN ONE TEXT IS A SUBSET OF THE FIRST PART OF THE
OTHER TEXT , THE SHORTER ONE IS CONSIDERED TO BE < THE LONGER ONE.
SCOMP JSR PSETUP
ICOMP
DP TO SP, MP TO PP.
COMPARE TEXT & RETURN WITH CC SET.
I
PILOT
H. B. STEWART
B2FE A5 CO
B300 C5 Cl
B302 FO 2D
B304 A2 4A
B306 AO 3E
B308 20 C5 B3
B30B A2 4E
B30D AO 3A
B30F 20 C5 B3
B312
B312 20 9D B3
B31 5 FO 1A
B317 A9 03
B319 85 DO
B31B 18
B31C AO 02
B31E 71 CE
B320 85 D1
B322 20 34 B3
B325 FO OC
B327 90 08
B329 A2 4E
B32B 20 10 B4
B32E 4C 12 B3
B331 A9 FF
B333 60
i
i
i
i
i
GENERAL STRING IMPLEMENTATION UTILITIES
THESE ROUTINES USE THE FOLLOWING VARIABLES:
SP * SOURCE TEXT POINTER
PP » PATTERN TEXT POINTER
i IFIND — FIND NAMED STRING IN LIST
i
; CALLING SEQUENCE:
#
i NP POINTS TO DESIRED NAME
i LP POINTS TO START OF NAMED STRING LIST
i
i JSR IFIND
1 BNE NOT FOUND (PP POINTS TO SUCCESSOR)
PP POINTS TO NAMED STRING IN LIST
LDA
NP+2
; NAME NULL?
CMP
NP+3
BEQ
IF 1080
; YES — DONE
LDX
#SP— DTAB
; SP = NP.
LDY
#NP-DTAB
JSR
PMOVE
LDX
#PP— DTAB
; PP = LP.
LDY
#LP~DTAB
JSR
PMOVE
IFI020
; *S*
IF 1080
IF 1090
LDX
#PP— DTAB
JSR
SEND
#
END
OF LIST?
BEQ
IF I 080
J
YES
— DONE.
LDA
#3
i
NO -
- SETUP START INDEX . . .
STA
PP+2
CLC
1
• • •
& END INDEX (TO NAME).
LDY
#2
ADC
(PP), Y
STA
P P+3
JSR
I COMP
i
NAME
COMPARISON.
BEQ
IF I 090
J
FOUND IT!
BCC
IF I 080
#
PAST
CORRECT SPOT IN ORDERED
LDX
#PP-DTAB
i
SKIP
TO NEXT LIST ENTRY.
JSR
SNXTI
JMP
IF 1020
#
TRY
AGAIN.
LDA
#$FF
#
SET
CC FOR EXIT (NOT FOUND).
RTS
RETURN WITH CC SET.
B333 60
I FI 090 RTS
i RETURN WITH CC SET.
PILOT — H. B. STEWART
B334 20 A9 B3
B337 FO 3B
B339 BO ID
B33B
B33D
B33F
B340
B342
B344
B345
B347
A5 D1
85 A 7
38
A5 CD
E5 CC
18
65 DO
85 D1
B349 20 74 B3
B34C 08
B34D A5 A7
B34F 85 D1
B351 28
B352 DO IF
B354 A9 FF
B356 18
B357 60
ICOMP — COMPARE TEXT DATA
CALLING SEQUENCE:
SP POINTS TO DATA TEXT
PP POINTS TO DATA TEXT
ICOMP
B358
B35A
B35C
B35D
B35F
B361
B362
B364
A5 CD
85 A7
18
A5 CC
65 D1
38
E5 DO
85 CD
B366 20 74 B3
B369 08
B36A A5 A7
B36C 85 CD
B36E 28
B36F DO 02
B37 1 A9 FF
I COO 50
JSR
ICOMP
BEQ
DATA TEXTS ARE IDENTICAL
BCS
SP DATA
>= PP DATA
BCC
SP DATA
< PP DATA
JSR
ILENG
i
SEE IF EQUAL LENGTHS.
BEQ
IMATCH
i
YES — COMPARE & RETURN.
BCS
IC0050
#
PP DATA SHORTER THAN SP DATA.
LDA
PP+3
i
SAVE STARTING VALUE.
STA
TEMP2
SEC
i
(CLEAR BORROW).
LDA
SP+3
i
ADJUST PP DATA LENGTH FOR COMPAR
SBC
SP+2
CLC
ADC
PP+2
STA
PP+3
JSR
IMATCH
i
NOW COMPARE.
PHP
LDA
TEMP2
i
RESTORE ALTERED PARAMETER.
STA
PP+3
PLP
BNE
IC0090
*
NOT EQUAL. — CC SET FOR EXIT.
r LDA
n r
#*FF
9
SET CC FOR EXIT .J
RTS
9
RETURN WITH CC SET.
LDA
SP+3
9
SAVE STARTING VALUE.
STA
TEMP2
CLC
LDA
SP+2
9
ADJUST SP LENGTH FOR COMPARISON
ADC
PP+3
SEC
SBC
PP+2
STA
SP+3
JSR
IMATCH
9
NOW COMPARE.
PHP
LDA
TEMP2
9
RESTORE ALTERED PARAMETER.
STA
SP+3
PLP
BNE
IC0090
9
NOT EQUAL — CC SET FOR EXIT.
LDA
#$FF
i
SET CC FOR EXIT.
SEC
; *S*
J
PILOT
H. B, STEWART
0
B373 60
B374 A5 CC
B376 85 A 1
B378 A5 DO
B37A 85 A2
B37C A4 DO
B37E C4 D1
B380 FO 10
B382 A4 CC
B384 B 1 CA
B386 E6 CC
B388 A4 DO
B38A D1 CE
B38C DO 04
B38E E6 DO
B390 BO EA
B392 08
B393 A5 A1
B395 85 CC
B397 A5 A2
B399 85 DO
B39B 28
B39C
B39C 60
IC0090 RTS
RETURN WITH CC SET
i
$
i
IMATCH — MATCH TWO TEXT DATA STRINGS
CALLING SEQUENCE
SP - SOURCE DATA TEXT (SOURCE DATA MUST BE LONGER THAN PATTERN)
PP = PATTERN DATA TEXT
;
JSR IMATCH
BEQ PATTERN IS CONTAINED WITHIN SOURCE
BCS SOURCE COLLATES >= PATTERN
BCC SOURCE COLLATES < PATTERN
IMATCH LDA SP+2
STA TEMP
LDA PP+2
STA TEMP+1
SAVE STARTING INDICES.
IMT010 LDV PP+2
CPY PP+3
BEQ IMT090
SEE IF ALL OF PATTERN HAS MATCHED.
YES — ALL DONE.
LDY SP+2 ; NO — COMPARE ANOTHER BYTE.
LDA ( SP ) i Y
INC SP+2
LDY PP+2
CMP ( PP ) i Y
BNE IMT090 ; NO COMPARE — CC SET FOR EXIT.
INC PP+2
BCS IMT010 ; (BRA).
IMT090 PHP
LDA TEMP
STA SP+2
LDA TEMP+1
STA PP+2
PLP
; SAVE CC.
; RESTORE STARTING INDICES.
; RESTORE CC.
SEN090
RTS
; RETURN WITH CC SET.
SEND — CHECK FOR END OF STRING LIST
CALLING SEQUENCE:
X = DTAB OFFSET TO LIST POINTER
JSR SEND
BEQ END OF LIST REACHED
Y IS ALTERED
PILOT
H. B.
STEWART
B39D
AO
30
SEND
LDY
B39F
20
63
B5
JSR
B3A2
FO
FS
BEQ
B3A4
AO
34
LDY
B3A6
4C
63
B5
JMP
#S1H-DTAB
DCMP I
SEN090
4S2H-DTAB
DCMP I
; SEE IF END OF REGION #1.
; YES.
; SEE IF END OF REGION #2 .
; ... RETURN WITH CC SET.
ILENG — COMPARE LENGTHS OF SOURCE TEXT AND PATTERN TEXT
CALLING SEQUENCE:
SP POINTS TO SOURCE DATA TEXT
PP POINTS TO PATTERN DATA TEXT
JSR
ILENG
BEQ
DATA TEXTS
ARE EQUAL LENGTH
BCS
SOURCE TEXT
>= PATTERN TEXT
BCC
SOURCE TEXT
< PATTERN TEXT
B3A9
A5
D1
ILENG
LDA
PP+3
B3AB
38
SEC
B3AC
E5
DO
SBC
PP+2
B3AE
85
A1
STA
TEMP
B3B0
A5
CD
LDA
SP+3
B3B2
E5
CC
SBC
SP+2
B3B4
E5
A1
SBC
TEMP
; CC = SP LENGTH - PP
B3B6
60
RTS
PSETUP —
MOVE POINTERS (DP TO SP, MP TO PP )
CALLING SEQUENCE:
JSR
PSETUP
SP =
DP
PP =
MP
B3B7
A2
4A
F
J SETUP
LDX
#SP-DTAB
; SP = DP.
B3B9
AO
42
LDY
#DP~DTAB
E3BB
20
C5 B3
JSR
PMOVE
B3BE
A2
4E
LDX
#PP-DTAB
; PP = MP.
B3C0
AO
46
LDY
#MP-DTAB
B3C2
4C
C5 B3
JMP
PMOVE
; AND RETURN.
/
i
PMOVE
— MOVE
STRING/DATA
TEXT POINTERS
CALLING SEQUENCE:
o
PILOT — H. B STEWART
#
*
r
i
i
#
i
#
#
X » DTAB OFFSET
Y « DTAB OFFSET
JSR PMOVE
DTAB ( X ) = DTAB(Y) (4 BYTE MOVE)
B3C5
B9
82
00
PMOVE
LDA
DTAB+2* Y
B3C8
95
82
STA
DTAB+2# X
B3CA
B9
83
00
LDA
DTAB+3, Y
B3CD
95
83
STA
DTAB+3, X
; ***
EXTERNAL
ENTRY POINT
B3CF
B9
80
00
DMOVI
LDA
DTABi Y
B3D2
95
80
STA
DTAB/ X
B3D4
B9
81
00
LDA
DTAB+1 / Y
B3D7
95
81
STA
DTAB+1 / X
B3D9
60
RTS
. IF
DEBUG
i
i I ALLOC — ALLOCATE MEMORY
#
; CALLING SEQUENCE:
i
i A = # OF BYTES TO ALLOCATE
JSR
BNE
I ALLOC
NOT ENOUGH ROOM
DP POINTS TO NEW ALLOCATION + 2 (START OF STRING)
I 1 I ,
PILOT — H. B. STEWART
STA
MEMB
*
LDA
#0
STA
MEMB+1
LDA
#3
i
LDX
#MEMB-DTAB
JSR
DADDS
LDX
#MEMA-DTAB
i
LDY
#S2L-DTAB
JSR
DMOVI
JSR
MALLOC
#
BNE
IAL090
i
LDX
#DP-DTAB
i
LDY
#MEMA-DTAB
JSR
DMOVI
LDA
#2
JSR
DADDS
+ 3.
; SETUP MEMA - ALLOCATION ADDRESS.
NOT ENOUGH ROOM.
DP = ADDRESS OF STRING STORAGE AREA
PILOT
I
0
f
0
0
IAL090
LDA
#1
STA
DP+2
STA
DP+3
LDA
#0
RTS
. END IF
; SET STARTING Z< ENDING INDICES.
; SET CC FOR EXIT.
; RETURN WITH CC SET.
#
i SMOVI MOVE TEXT DATA TO MEMA (FORMING STRING)
; CALLING SEQUENCE:
X = DTAB INDEX TO STRING POINTER
Y = MEMA OFFSET TO START STORING
VSR SMOVI
MEMA = LAST LOCATION STORED INTO + 1
Y = 0
B3DA B5 80
B3DC 85 A1
B3DE B5 81
SMOVI
LDA
STA
LDA
STA
LDA
STA
DTAB, X
TEMP
DTAB+1, X
i
MOVE SOURCE POINTER TO TEMP.
B3E0 85 A2
B3E2 B5 82
B3E4 85 A3
TEMP+1
DTAB+2, X
TEMP+2
B3E6 B5 83
LDA
DTAB+3, X
B3E8 85 A4
STA
TEMP+3
B3EA 38
SEC
i
CALCULATE STRING LENGTH . . .
B3EB A5 A4
LDA
TEMP+3
B3ED E5 A3
SBC
TEMP+2
B3EF 91 D2
SM0010
STA
(MEMA), Y
i
... & STORE IN TARGET AREA.
B3F1 C8
INY
B3F2 84 A5
STY
TEMP+4
>
SAVE INDEX.
B3F4 A4 A3
LDY
TEMP+2
j
DONE?
B3F6 C4 A4
CPY
TEMP+3
B3F8 FO 08
BEQ
SM0090
#
YES.
B3FA B 1 A 1
LDA
(TEMP), Y
#
NO — MOVE A BYTE.
B3FC E6 A3
INC
TEMP+2
B3FE A4 A5
LDY
TEMP+4
i
GET TARGET INDEX.
B400 DO ED
BNE
SM0010
#
(BRA).
B402 A9 00
SM0090
LDA
#0
#
PREPARE FOR D. P. ADDITION.
E404 85 A6
STA
TEMP+5
B406 A2 52
LDX
#MEMA-DTAB
i
PREPARE TO BUMP MEMA.
B408 AO 25
LDY
#TEMP+4-DTAB
B40A 20 80 B5
VSR
DADDI
B40D AO 00
LDY
#0
#
AS PROMISED.
B40F 60
RTS
PILOT — H. B STEWART
PILOT — H. B. STEWART
SNXTI — POINT TO NEXT STRING IN LIST
CALLING SEQUENCE:
X = DATA OFFSET TO STRING LIST POINTER
; JSR
SNXTI
t
i DTAB (X )
= POINTER
B410 B5 81
i
SNXTI LDA
DTAB+1 , X
B412 85 A2
STA
TEMP+1
B414 B5 80
LDA
DTAB, X
B416 85 A1
STA
TEMP
B418 AO 00
LDY
#0
B41 A 18
CLC
B41B 71 A1
ADC
(TEMP), Y
B41D 75 SO
STA
DTAB, X
B41F C8
INY
B420 A5 A2
LDA
TEMP+1
B422 71 A 1
ADC
(TEMP), Y
B424 95 81
STA
DTAB+1, X
B426 60
RTS
MOVE STRING POINTER TO TEMP.
; ADD ADDRESS TO . .
ALLOCATION LENGTH
TO GET NEXT ADDRESS.
PILOT
H B STEWART
MEMORY MANAGEMENT PACKAGE
AVAILABLE MEMORY IS DIVIDED INTO TWO REGIONS WHICH GROW TOWARD EACH
OTHER i THE REGIONS ARE DEFINED BY FOUR POINTER VARIABLES:
'S1L '
' S 1 H '
'S2L '
'S2H '
POINTS TO BOTTOM OF REGION #1
POINTS TO FIRST UNUSED LOCATION ABOVE REGION #1
POINTS TO BOTTOM OF REGION #2
POINTS TO FIRST UNUSED LOCATION ABOVE REGION #2
THREE ROUTINES ARE PROVIDED TO ALLOCATE AND DEALLOCATE MEMORY:
'MALLOC '
'MDEALL '
IS USED TO ALLOCATE MEMORY
IS USED TO DEALLOCATE MEMORY
THE TWO REGIONS ARE MAINTAINED AS TWO COMPRESSED STACKS, ALLOCATION
AND DEALLOCATION INVOLVES THE MOVEMENT OF DATA TO CREATE AND
ELIMINATE HOLES IN THE STACKS.
j MALLOC — MEMORY ALLOCATE
I
I CALLING SEQUENCE:
'MEMA ' CONTAINS THE ADDRESS OF THE START OF ALLOCATION
j REGION #1: DATA AT START ADDRESS AND ABOVE ARE MOVED UP
i REGION #2: DATA BELOW START ADDRESS ARE MOVED DOWN.
, 'MEMB ' CONTAINS THE NUMBER OF BYTES TO ALLOCATE
JSR
BNE
MALLOC
NOT ENOUGH MEMORY TO SATISFY ALLOCATION
'MEMA' CONTAINS LOWEST ADDRESS IN THE ALLOCATED BLOCK
FIRST TWO BYTES OF ALLOCATED BLOCK « BLOCK SIZE
B427
AO
30
MALLOC LDY
#S1H-DTAB
i
ACC = S1H . . .
B429
20
9E
B6
JSR
DLOADA
B42C
AO
54
LDY
#MEMB~DT AB
i
... + MEMB.
B42E
20
AS
B6
JSR
DADDA
B431
AO
32
LDY
#S2L-DTAB
i
COMPARE ACC WITH S2L
B433
20
AD
B6
JSR
DCMPA
B436
BO
69
BCS
MAL300
l
NOT ENOUGH ROOM.
B438
A2
52
LDX
#MEMA-DTAB
i
SEE IF ALLOCATION IN
B43A
AO
32
LDY
#S2L-DTAB
B43C
20
63
B3
JSR
DCMPI
B43F
BO
28
BCS
MAL100
}
REGION #2.
i ALLOCATE FROM REGION #1
B441
A2
36
LDX
#MSP~DTAB
J
MSP ■ MEMA.
B443
AO
32
LDY
#MEMA-DTAB
B443
20
CF
B3
JSR
DMOVI
■ 1.0. OI twfln J
B448 AS 58
B44A 20 CF B3
LDX
JSR
#MDP-DTAB
DMOVI
B44D AO 54
B44F 20 80 B5
LDV
USR
#MEMB-DTAB
DADDI
B452 A2 5A
B454 AO 30
B456 20 CF B3
LDX
LDV
JSR
#MBC-DTAB
#S1H-DTAB
DMOVI
B459 AO 52
B45B 20 90 B5
LDY
JSR
#MEMA-DTAB
DSUBI
B45E AS 30
B460 20 A3 B6
LDX
JSR
#S 1 H-DT AB
DSTORA
B463 20 30 B5
JSR
MOVDA
B466 4C 94 B4
JMP
MAL200
; ALLOCATE IN REGION #2
B469 AS 56
MALI 00 LDX
#MSP-DTAB
B46B AO 32
LDY
#S2L-DTAB
B46D 20 CF B3
JSR
DMOVI
B470 AS 5A
LDX
#MBC-DTAE
B 472 AO 52
LDY
#MEMA-DTAB
B474 20 CF B3
JSR
DMOVI
B477 AO 32
LDY
#S2L-DTAB
B479 20 90 B5
JSR
DSUB I
B47C A2 32
LDX
#S2L.~DT AB
B47E AO 54
LDY
#MEMB-~DTAB
B480 20 90 B5
JSR
DSUB I
B483 A2 58
LDX
#MDP~DTAB
B485 AO 32
LDY
#S2L-DTAB
B487 20 CF B3
JSR
DMOVI
B48A A2 52
LDX
#MEMA-DTAB
B48C AO 54
LDY
#MEMB~DTAB
B48E 20 90 B5
JSR
DSUBI
B491 20 OC B5
JSR
i COMMON CODE
MOVIA
B494 AO 00
MAL200 LDY
#0
B496 A5 D4
LDA
MEMB
B498 91 D2
STA
(MEMA), Y
B49A C8
I NY
B49B A5 D5
LDA
MEMB+1
B49D 91 D2
STA
(MEMA), Y
B49F 88
DEY
B4A0 60
RTS
B4A1 A9 89
MAL300 LDA
#INSERR
i MDP = MEMA . . .
i ... + MEMO.
i MEC ■ S1H . . .
i ... - MEMA.
; S1H ~ ACC <= S1H + MEMB )
; MOVE DATA UPWARD.
i MSP = SSL.
; MEC = MEMA . . .
i ... - SSL.
; SSL = SSL - MEMB.
; MDP = SSL (NEW VALUE).
; MEMA = MEMA - MEMB.
; MOVE DATA DOWNWARD.
; MOVE BLOCK SIZE TO BLOCK.
; SET CC FOR NORMAL EXIT.
; SET CC FOR ERROR EXIT.
PILOT
H. B. STEWART
i i uia c.nnun cai i.
PILOT — H. B. STEWART
B4A3 60
RTS
; liDEALL — MEMORY DEALLOCATE
9
} CALLING SEQUENCE:
i
; 'MEMA ' = ADDRESS OF BLOCK TO DEALLOCATE
; FIRST 2 BYTES OF BLOCK = SIZE OF BLOCK
JSR
'MEMA
B4A4 AO 00
B4A6 B 1 D2
B4A8 85 D4
B4AA C8
B4AB B 1 D2
B4AD 85 D5
MDEALL
MDEALL
= ADDRESS OF BLOCK FOLLOWING DEALLOCATED BLOCK (AFTER DEALL)
#0 ; GET SIZE OF BLOCK TO MEMB.
(MEMA), Y
MEMB
(MEMA), Y
MEMB+1
B4AF A2 52
LDX
#MEMA-DTAB
9
SEE IF IN 1
•
B4B 1 AO 32
LDY
#S2L-DTAB
B4B3 20 63 B5
JSR
DCMPI
B4B6 BO 2?
BCS
MDA100
9
REGION #2.
•
; DEALLOCATE
FROM REGION #1.
#
B4B8 A2 56
LDX
#MSP-DTAB
i
MSP » MEMA
B4BA AO 52
LDY
#MEMA--DTAB
B4BC 20 CF B3
JSR
DMOVI
B4BF AO 54
LDY
#MEMB-DTAE
9
... + MEMB
%
B4C 1 20 80 B5
JSR
DADD I
B4C4 A2 5A
LDX
#MBC-DTAB
9
MBC = S1H
B4C6 AO 30
LDY
#S1H-DTAB
#
B4C8 20 CF B3
JSR
DMOVI
B4CB AO 56
LDY
#MSP-DTAB
9
... - MSP.
•
B4CD 20 90 B5
JSR
DSUBI
B4D0 A2 30
LDX
#S1H-DTAB
#
S1H = S1H
•
B4D2 AO 54
LDY
#MEMB-DTAB
B4D4 20 90 B5
JSR
DSUBI
— „ r ^. r „
_ - - - - - r -- i
#
B4D7 A2 58
LDX
#MDP-DTAB
)
MDP = MEMA
B4D9 AO 52
LDY
#MEMA-DTAB
B4DB 20 CF B3
JSR
DMOVI
•
B4DE 4C OC B5
JMP
MOV I A
#
MOVE DATA
MEMB.
DEALLOCATE MEMORY IN REGION #2
B4E1
A2
56
MDA100 LDX
#MSP-DTAB
B4E3
AO
32
LDY
#S2L-DTAB
B4E5
20
CF B3
JSR
DMOVI
MSP = S2L.
PILOT
H. B. STEWART
B4E8 AS 5A
LDX
#MBC-DTAB
i
B4EA AO 52
LDY
#MEMA-DTAB
B4EC SO CF B3
JSR
DMOVI
B4EF AO 32
LDY
#S2L-DTAB
i
B4F 1 20 90 B5
JSR
DSUBI
B4F4 AS 32
LDX
#S2L-DTAB
i
B4F6 AO 54
LDY
#MEMB--DTAB
B4F8 20 80 B 5
JSR
DADD I
B4FB A2 58
LDX
#MDP-DTAB
i
B4FD AO 32
LDY
#S2L.-DTAB
B4FF 20 CF B 3
JSR
DMOVI
B502 A2 52
LDX
#MEMA-DTAB
i
B504 AO 54
LDY
#MEMB"DT AB
B506 20 80 B 5
JSR
DADDI
B509 4C 30 B5
JMP
MOVDA
i
f
MBC * MEMA . . .
. . . - SSL.
SSL * SSL + MEMO.
MDP - SSL (NEW VALUE).
MEMA a MEMA + MEMB.
MOVE DATA UPWARD & RETURN.
PILOT
H. B. STEWART
; MOVE UTILITIES FOR MEMORY MANAGEMENT
' MOVE BLOCKS OF- DATA WITH EITHER INCREASING OR DECREASING ADDRESS
; THREE VARIABLES CONTROL THE MOVE ROUTINES:
i 'MSP ' CONTAINS POINTER TO SOURCE DATA LOCATION
i MDP' CONTAINS POINTER TO DESTINATION DATA LOCATION
; 'MBC' CONTAINS THE NUMBER OF BYTES TO MOVE
MOV I A — MOVE DATA BLOCK WITH INCREASING ADDRESS
CALLING SEQUENCE:
'MSP', 'MDP' & 'MBC ' SETUP
JSR MOVIA
B5QC
A5
DA
MOVIA
LDA
MBC
SEE IF BYTE COUNT = ZERO.
B50E
AA
TAX
i
SAVE LSB OF BYTE COUNT.
B50F
05
DB
ORA
MBC + 1
B511
FO
1C
BEQ
MVI090
9
ZERO — NOTHING TO DO.
B513
AO
00
LDY
#0
9
INDEX TO DATA BLOCK.
B515
B 1
D6
MV 1010
LDA
(MSP), Y
9
MOVE DATA.
B517
91
D8
STA
(MDP), Y
B51 9
CS
I NY
9
BUMP INDEX.
B51 A
DO
04
BNE
MV I 020
9
NO PAGE WRAP.
B51C
E6
D7
INC
MSP + 1
9
PAGE WRAP — BUMP POINTER VARIABLES
B51E
E6
D9
INC
MDP+i
B520
CA
MV I 020
DEX
9
DONE?
B521
DO
04
BNE
MVI030
9
NO.
B523
A5
DB
LDA
MBC + 1
9
NOT SURE — CHECK FURTHER.
B525
FO
08
BEQ
MVI090
9
YES — DONE.
B527
EO
FF
MV I 030
CPX
#SFF
9
MAINTAIN D. P. BYTE COUNT.
B529
DO
EA
BNE
MV 101 0
B52B
C6
DE
DEC
MBC+1
9
BORROW FROM MSB.
B52D
BO
E6
BCS
MV 10 10
9
(BRA).
B52F
60
MV I 090
RTS
/
; MOVDA
— MOVE
DATA BLOCK
WITH DECREASING ADDRESS
; CALLING SEQUENCE:
i
i 'MSP', 'MDP', & 'MBC' SETUP
; JSR MOVDA
r 1 LUT
H. B. STEWART
#
#
#
#
#
#
j
B530 A5 DA
MOVDA
LDA
MBC
B 532 AA
TAX
B533 A8
TAY
B534 05 DB
ORA
MBC+1
B536 FO 24
BEQ
MVD090
B538 18
CLC
B539 A5 D7
LDA
MSP+1
B53B 65 DB
ADC
MBC+1
B53D 85 D7
STA
MSP + 1
B53F 18
CLC
B540 A5 D9
LDA
MDP + 1
B542 65 DB
ADC
MBC + 1
B544 85 D9
STA
MDP+1
B546 88
MVD010
DEY
B547 CO FF
CP Y
#$FF
B549 DO 06
BNE
MVD020
B54B C6 DB
DEC
MBC + 1
B54D C6 D7
DEC
MSP+1
B54F C6 D9
DEC
MDP+1
B551 B 1 D6
MVD020
LDA
(MSP ) , Y
B553 91 D8
STA
( MDP ) > Y
B555 CA
DEX
B556 DO EE
BNE
MVD010
B558 A5 DB
LDA
MBC + 1
B55A DO EA
BNE
MVD010
B55C 60
MVD090
RTS
SETUP BYTE COUNT
. . AND DATA INDEX.
TEST FOR ZERO BYTE COUNT.
ZERO — NOTHING TO DO.
ADJUST POINTERS FOR START.
DECREMENT INDEX.
WRAP?
NO.
YES — DECREMENT ALL POINTERS (MSB).
MOVE A DATA BYTE.
DONE?
NO — CONTINUE.
NOT SURE — CHECK FURTHER.
NO — CONTINUE.
YES — RETURN.
PILOT
H. B. STEWART
DOUBLE PRECISION ROUTINES
ALL. VARIABLES ARE ACCESSED VIA THEIR OFFSET FROM SYMBOL 'DTAB'.
NORMALLY THE X AND/OR Y REGISTERS CONTAIN THE 'DTAB ' OFFSET
VALUES TO THE VARIABLE ( S ) TO BE DEALT WITH.
DCWCI — DOUBLE BYTE UNSIGNED COMPARE WITH CONSTANT.
CALLING SEQUENCE:
X = DTAB OFFSET TO VARIABLE.
Y = MSB OF CONSTANT.
A = LSB OF CONSTANT.
JSR
DCWCI
; UNSIGNED COMPARE.
CC =
DTAB ( X ) : Y, A
B55D
85
A7
DCWCI
STA
TEMP2
; SAVE LSB.
B55F
84
A8
STY
TEMP2+1
; SAVE MSB.
B561
AO
27
LDY
#TEMP2-DTAB
; *S*
JMP
DCMPI
; COMPARE & RETURN.
DCMPI — DOUBLE BYTE UNSIGNED COMPARE INDEXED
CALLING SEQUENCE:
X = DATA #1 OFFSET
Y = DATA #2 OFFSET
JSR
DCMPI
BEQ
DTAB ( X ) =
DTAB(Y)
BCS
DTAB ( X ) >=
= DTAB(Y)
BCC
DTAB ( X ) <
DTAB(Y)
CC =
DTAB ( X ) : DTAB(Y) (UNSIGNED)
B563
B5
81
I
)CMP I
LDA
DTAB+1, X
#
COMPARE MSBS.
B565
D9
81
00
CMP
DTAB+1, Y
B568
DO
05
BNE
DCM090
9
NOT EQUAL — ALL
B56A
B5
80
DCM010
LDA
DTAB, X
9
EQUAL — COMPARE
B56C
D9
80
00
CMP
DTAB, Y
B56F
60
DCM090
RTS
. — — -
DSCMI -
DOUBLE BYTE SIGNED COMPARE INDEXED
PILOT
H B STEWART
i CALLING SEQUENCE
X - DATA #1 OFFSET
Y - DATA #2 OFFSET
i
JSR
DSCMI
i
BEQ
DTAB(X) -
DTAB < Y )
i
BCS
DTAB(X) >«
DTAB ( Y >
i
4
DSCMI
BCC
DTAB(X) <
DTAB(Y)
B570
B9
81 00
LDA
DTAB + 1, Y
i
COMPARE MSBS FIRST.
B573
49
80
EOR
#$80
B575
85
A 1
STA
TEMP
B577
B5
81
LDA
DTAB+1, X
B579
49
80
EOR
#$80
B57B
C 5
A 1
CMP
TEMP
B57D
FO
EB
BEQ
DC MO 10
i
EQUAL — COMPARE LSBS
B57F
60
RTS
J
NOT EQUAL — ALL DONE
DMOVI — DOUBLE BYTE MOVE INDEXED
CALLING SEQUENCE:
X = DESTINATION OFFSET
Y = SOURCE OFFSET
JSR DMOVI
i DTAB(X) = DTAB(Y)
i
i *** SEE ' PMOVE ' FOR THE 'DMOVI' CODE *■*•*
DADDI — DOUBLE PRECISION ADD
CALLING SEQUENCE:
X ~ OFFSET TO
Y = OFFSET TO
i
JSR
DADDI
i
BVS
OVERFLOW
i
i
DTAB ( X )
= DTAB ( X
B580
18
9
DADDI
CLC
B581
B5
80
DADDI X
LDA
DTAB/ X
B583
79
80
00
ADC
DTAB, Y
B586
95
80
STA
DTAB/ X
B588
B5
81
LDA
DTAB+1 / X
B58A
79
81
00
ADC
DTAB+1, Y
B58D
95
81
STA
DTAB+1, X
PILOT
H. B. STEWART
w w r 1 r r w * w V
B58D 95 81
HUL
STA
U I ftB+l , Y
DTAB+1, X
PILOT — H. B. STEWART
B58F 60
RTS
DSUBI — DOUBLE PRECISION SUBTRACT
CALLING SEQUENCE:
X = OFFSET
Y = OFFSET
JSR
DSUBI
BVS
OVERFLOW
BEQ
RESULT =
DTAB(X)
= DTAB ( X
B590
38
I
DSUBI
SEC
B591
B5
80
DSUBIX
LDA
DTAB, X
B593
F9
80
00
SBC
DTAB, Y
B596
95
80
STA
DTAB, X
B598
B5
81
LDA
DTAB+1, X
B59A
F9
81
00
SBC
DTAB+1, Y
B59D
95
81
STA
DTAB+1, X
B59F
15
80
ORA
DTAB, X
B5A1
60
RTS
- DTAB(Y)
; SET CC FOR ZERO TEST.
DMULI — DOUBLE PRECISION MULTIPLY
CALLING SEQUENCE:
X = OFFSET
X = OFFSET
#
JSR
DMULI
$
9
DTAB ( X )
= DTAB ( X
B5A2
A9
10
9
DMULI
LDA
#16
B5A4
85
A3
STA
TEMP+2
B5A6
A9
00
LDA
#0
B5A8
85
A1
STA
TEMP
B5AA
85
A2
STA
TEMP+1
B5AC
16
80
DMU010
ASL
DTAB, X
B5AE
36
81
ROL
DTAB+1, X
B5B0
90
OF
BCC
DMU020
B5B2
18
CLC
B5B3
A5
A1
LDA
TEMP
B5B5
79
80 00
ADC
DTAB, Y
SETUP LOOP COUNTER.
INITIALIZE TEMP ACCUMULATOR.
; DOUBLE PRECISION SHIFT LEFT.
; NO BIT PRESENT.
; BIT SET — ADD TO PARTIAL.
PILOT
H. B STEWART
B3B8 83 A 1
B3BA A3 A2
B3BC 79 81 00
B3BF 83 A2
B3C1 C6 A3
B3C3 FO 07
BSC 3 06 A 1
B3C7 26 A2
BSC 9 4C AC B5
B3CC A5 A 1
B5CE 95 80
B5D0 A5 A2
B5D2 95 81
B5D4 60
B5D5 B9 80 00
B5D8 19 81 00
B5DB DO 05
B5DD A9 84
B5DF 4C 6C A1
B5E2 A9 11
B5E4 85 A3
B5E6 86 A4
B5E8 A9 00
B5EA 85 A1
B5EC 85 A2
B5EE B9 81 00
B5F1 85 A6
B5F3 10 06
B5F5 20 3F B6
B5F8 20 2B B6
B5FB B5 81
B5FD 85 A5
B5FF 10 03
B601 20 3F B6
sta\
\ TEMP
LDA
^ TEMP-*- 1
ADC
DTAB+1, Y
STA
TEMP+1
DMU020
DEC
TEMP -*-2
i DONE?
BEQ
DMU090
i YES — RESULT
IS IN 'TEMP
ASL
TEMP
i NO — DOUBLE
PRECISION SHIFT LEFT
ROL
TEMP+1
JMP
DMU010
DMU090
LDA
TEMP
i DONE — MOVE
RESULT.
STA
DTAB, X
LDA
TEMP+1
STA
DTAB+1 , X
RTS
; DDIVI — DOUBLE PRECISION DIVIDE
i
; CALLING SEQUENCE:
i
i X = OFFSET TO DIVIDEND
; Y = OFFSET TO DIVISOR
I
JSR
DDIVI
i
}
DTAB ( X )
= DTAB ( X ) /
DTAB(Y) (SIGNED)
9
' TEMP '
= REMAINDER
(SIGN
MAY BE WRONG ! ! ! )
9
DDIVI
LDA
DTAB# Y
j
CHECK FOR DIVIDE BY ZERO.
ORA
DTAB+1, Y
BNE
DDI003
9
2
O
1
i
O
LDA
#DI VERR
9
ERROR.
JMP
PSTOP
DDI003
LDA
#16+1
9
SETUP LOOP COUNTER.
STA
TEMP+2
STX
TEMP+3
9
SAVE INDEX TO DIVIDEND.
LDA
#0
9
INITIALIZE REMAINDER.
STA
TEMP
STA
TEMP+1
LDA
DTAB+1, Y
9
SEE IF DIVISOR IS NEGATIVE.
STA
TEMP+5
BPL
DD I 006
9
MO.
JSR
DNEGI
9
YES — NEGATE DIVIDEND . . .
JSR
DDI093
9
... & DIVISOR (*** CRAZY CALL ***).
DDI006
LDA
DTAB+1, X
*
SEE IF DIVIDEND IS NEGATIVE.
STA
TEMP +4
BPL
DDI008
9
d
z
JSR
DNEGI
9
YES — NEGATE IT NOW (& THEN AGAIN LATE
PILOT
H. B. STEWART
i NO.
B6FF lO 03
B601 20 3F B6
PILOT — H. B. STEWART
BPL DD 1008
JSR DNEGI
i YES — NEGATE IT NOW (& THEN AGAIN LATER).
/
/
0
0
0
B604
18
DDI008
CLC
B605
A6
A4
DDI010
LDX
TEMP+3
; GET INDEX TO DIVIDEND.
B607
36
80
ROL
DTAB, X
; DOUBLE PRECISION ROTATE.
B609
36
81
ROL
DTAB+1 / X
B60B
C6
A3
DEC
TEMP+2
; DONE?
B60D
FO
11
BEQ
DDI090
i YES.
B60F
26
A1
ROL
TEMP
i NO.
B611
26
A2
ROL
TEMP+1
B613
A2
21
LDX
#TEMP-DTAB
; IS REMAINDER < DIVISOR?
B615
20
63
B5
JSR
DCMPI
B618
90
EB
BCC
DDI010
; YES.
B61 A
20
90
B5
JSR
DSUBI
; NO.
B61D
38
SEC
B61E
BO
E5
BCS
DDI010
; (BRA).
B620
A5
A5
DDI090
LDA
TEMP+4
; SEE IF RESULT IS TO BE NEGATED.
B622
10
03
BPL
DDI092
# NO.
B624
20
3F
B6
JSR
DNEGI
» YES — NEGATE POSITIVE RESULT.
B627
A5
A6
DDI092
LDA
TEMP+5
i WAS DIVISOR NEGATED EARLIER.
B629
10
07
BPL
DDI095
; NO.
B62B
98
DD I 093
TYA
; YES — NEGATE IT BACK TO ORIGINAL SIGN.
B62C
AA
TAX
B62D
20
3F
B6
JSR
DNEGI
B630
A6
A4
LDX
TEMP+3
; RESTORE INDEX.
B632
60
DDI095
RTS
DMODI — MODULO OF SORTS
CALLING SEQUENCE:
X = OFFSET TO DIVIDEND
Y = OFFSET OT DIVISOR
i
JSR
DMODI
/
#
DTAB ( X )
= DTAB ( X )
MOD DTAB(Y)
B633
20
D5 B5
#
DMODI
JSR
DDIVI
; FIRST DO DIVISION.
B636
A5
A1
LDA
TEMP
; TAKE ADVANTAGE OF SIDE EFFECT
B638
95
SO
STA
DTAB, X
B63A
A5
A2
LDA
TEMP+1
B63C
95
81
STA
DTAB + 1, X
B63E
60
RTS
; DNEGI
--/DOUBLE PRECISION NEGATE
H B STEWART
+ PILOT —
i
i
CALLING
X
NCE :
* OFFSET TO NUMBER
JSR DNEGI
i
9
<
DNEGI
DTAB ( X )
B63F
38
SEC
B640
A9
00
LDA
B642
F5
80
SBC
B644
95
80
STA
= -DTAB(X)
i (CLEAR BORROW).
#0
DT AB, X
DTAB, X
B646 A9 00
B648 F5 81
B64A 95 81
B64C 60
LDA #0
SBC DT AB + 1 * X
STA DTAB+1, X
RTS
; DADDS — ADD A REGISTER TO DOUBLE BYTE
$
; CALLING SEQUENCE:
/
; A - SIGNED BINARY NUMBER (-128 TO 127)
; X ■ DTAB OFFSET TO DP NUMBER
9
i JSR DADDS
f
DTAB ( X ) = DTAB ( X ) + A
B64D
C9
00
DADDS
CMP
#0
; SEE IF POSITIVE OR NEGATIVE
B64F
30
OA
BMI
DDA030
i NEGATIVE.
i **-■«-
EXTERNAL
ENTRY POINT ***
B651
18
DADDP
CLC
t
POSITIVE — ADD.
B652
75
80
ADC
DTAB, X
B654
95
80
STA
DTAB, X
B656
90
02
BCC
DDA010
*
NO CARRY.
B658
F6
81
INC
DTAB+1, X
i
CARRY — ADD TO MSB.
B65A
60
DDA010
RTS
- nUDCR-T
B65B
18
DDA030
CLC
L:
B65C
75
80
ADC
DTAB, X
B65E
95
80
STA
DTAB, X
B660
BO
02
BCS
DDA040
#
NO BORROW.
B662
D6
81
DEC
DTAB+1, X
9
BORROW — SUB FROM MSB.
B664 60 DDA040 RTS
; RELATIONAL TESTS
PILOT
H. B. STEWART
i RELATIONAL TESTS
PILOT — H. B. STEWART
CALLING SEQUENCE:
X = DATA #1 OFFSET
Y = DATA #2 OFFSET
JSR
DXXTI
DTAB(X) = 1 IF RELATION
B665
20
63
B5
DEQTI
JSR
DCMPI
B668
FO
27
BEQ
DTRUE
B66A
DO
29
BNE
DFALSE
B66C
20
63
B5
DNETI
JSR
DCMPI
B66F
DO
20
BNE
DTRUE
B67 1
FO
22
BEQ
DFALSE
B673
20
70
B5
DGTTI
JSR
DSCMI
B676
FO
ID
BEQ
DFALSE
B678
90
IB
BCC
DFALSE
B67A
BO
15
BCS
DTRUE
B67C
20
70
B5
DLTTI
JSR
DSCMI
B67F
90
10
BCC
DTRUE
B681
BO
12
BCS
DFALSE
B683
20
70
B5
DGETI
JSR
DSCMI
B6S6
BO
09
BCS
DTRUE
B688
90
OB
BCC
DFALSE
B68A
20
70
B5
DLETI
JSR
DSCMI
B68D
FO
02
BEQ
DTRUE
B68F
BO
04
BCS
DFALSE
> *S*
BCC
DTRUE
B691
A9
01
DTRUE
LDA
#1
B693
DO
02
BNE
DFA010
B695
A9
00
DFALSE
LDA
#0
B697
95
80
DFA010
STA
DTAB# X
B699
A9
00
LDA
#0
B69B
95
81
STA
DTAB + 1# X
E69D
60
RTS
ONE OF SIX ROUTINES
TRUE# O IF FALSE
; UNSIGNED COMPARE (FASTER THAN SIGNED).
; EQUAL RESULTS IN TRUE.
; UNEQUAL RESULTS IN FALSE.
i UNSIGNED COMPARE (FASTER THAN SIGNED).
; UNEQUAL RESULTS IN TRUE.
; EQUAL RESULTS IN FALSE.
# SIGNED COMPARE.
; EQUAL RESULTS IN FALSE.
# LESS THAN RESULTS IN FALSE.
; GREATER THAN RESULTS IN TRUE.
; SIGNED COMPARE.
i LESS THAN RESULTS IN TRUE.
; GREATER THAN OR EQUAL RESULTS IN FALSE.
i SIGNED COMPARE.
; GREATER THAN OR EQUAL RESULTS IN TRUE,
i LESS THAN RESULTS IN FALSE.
i SIGNED COMPARE.
; EQUAL RESULTS IN TRUE.s
; GREATER THAN RESULTS IN FALSE,
i LESS THAN RESULTS IN TRUE.
“biUe- i
; "TRUE" . . .
; ... TO VARIABLE.
i "FALSE" . . .
i
. . . TO VARIABLE.
PILOT
H B STEWART
/
ILOT
B69E A2 62
B6A0 4C CF B3
B6A3 AO 62
B6A5 4C CF B3
ACCUMULATOR FUNCTIONS — ASSUME THE EXISTENCE OF A DOUBLE PRECISION
VARIABLE WITHIN 'DTAB ' NAMED 'ACC'.
DLOADA — LOAD 'ACC' WITH DATA
CALLING SEQUENCE:
Y = OFFSET TO SOURCE DATA
JSR DLOADA
X = ACC OFFSET
'ACC ' = DTAB ( Y)
DLOADA LI
Cj mp
#ACC-DTAB
DMOVrj>
DSTORA — STORE 'ACC' TO LOCATION
CALLING SEQUENCE:
X = OFFSET TO DESTINATION
JSR DSTORA
Y = 'ACC' OFFSET
DTAB ( X ) = 'ACC'
DSTORA
LDY
JMP
#ACC— DTAB
DMOVT
1
l/V <sve
/
to e\ l 3"^ ^ S
/
B6A8 A2 62
B6AA 4C 80 B5
— H. B. STEWART
DADDA — ADD DATA TO 'ACC'
CALLING SEQUENCE:
DADDA L
'ACC' - 'ACC' + DTAB(Y)
#ACC-DTAB
Y = OFFSET TO DATA
JSR DADDA
X = 'ACC' OFFSET
— ~
. IF DEBUG
DSUBA — SUBTRACT DATA FROM 'ACC'
CALLING SEQUENCE:
Y = OFFSET TO DATA
_ i ■ U l
ICO
nci in a
ILOT — H. B STEWART
JSR DSUBA
BEQ RESULT = 0
X = 'ACC' OFFSET
'ACC' = 'ACC' - DTAB(Y)
DSUBA LDX #ACC-DTAB
JMP DSUBI
. END IF
DCMPA — COMPARE 'ACC' WITH DATA (UNSIGNED)
CALLING SEQUENCE:
Y = DATA OFFSET
JSR DCMPA
CC = 'ACC' : DTAB(Y) (UNSIGNED)
X = 'ACC' OFFSET
B6AD A2 62 DCMPA LDX #ACC-DTAB
B6AF 4C 63 B5 JMP DCMPI
PILOT
H. B
STEWART
l
i ASCDEC — DECIMAL IN ASCII TO BINARY CONVERSION
i
> CALLING SEQUENCE:
S
' X » DTAB OFFSET TO POINTER VARIABLE
i Y ■ OFFSET WITHIN STRING TO START OF NUMBER
i
I JSR ASCDEC
i
i * NUMBER ' = RESULT OF CONVERSION (MODULO 2**16)
i Y *
INDEX TO END OF NUMBER
DELIMITER
i USES
i
ASCDEC LDA
STA
'TEMP' THRU 'TEMP
'+4
B6B2 A9 00
B6B4 85 B8
#0
NUMBER
#
INITIALIZE RESULT.
B6B6 85 B9
STA
NUMBER+1
B6B8 B5 80
LDA
DTAB, X
i
MOVE POINTER.
B6BA 85 A3
STA
TEMP+2
B6BC B5 81
LDA
DTAB+1 » X
B6BE 85 A4
STA
TEMP+3
B6C0 B5 83
LDA
DTAB+3, X
i
SAVE END INDEX.
B6C2 85 A5
STA
TEMP+4
B6C4 B 1 A3
LDA
(TEMP+2) , Y
B6C6 C9 2D
CMP
# '-
i
UNARY MINUS?
B6C8 DO 09
BNE
ASC010
j
NO.
B6CA C8
INY
i
YES — SKIP OVER IT.
B6CB 20 D3 B6
JSR
ASC010
#
*** RECURSIVE CALL ***.
B6CE A2 38
LDX
#NUMBER-DTAB
B6D0 4C 3 F B6
JMP
DNEGI
i
NEGATE RESULT & RETURN.
B6D3 C4 A5
ASC010 CPY
TEMP+4
/
END OF STRING?
B6D5 FO 33
BEQ
ASC090
i
YES.
B6D7 B 1 A3
LDA
(TEMP+2) , Y
J
GET A CHARACTER.
B6D9 20 7 A B7
JSR
CNUMBR
#
VALID DECIMAL DIGIT?
B6DC BO 2C
BCS
ASC090
»
NO — DONE.
B6DE CS
INY
B6DF 48
PHA
>
YES — SAVE IT.
B6E0 06 B8
ASL
NUMBER
i
X2.
B6E2 26 B9
ROL
NUMBER+1
B6E4 A5 B9
LDA
NUMBER+1
i
SAVE X2.
B6E6 85 A2
STA
TEMP+1
B6E8 A5 B8
LDA
NUMBER
B6EA 85 A1
STA
TEMP
B6EC OA
B6ED 26 B9
B6EF OA
B6F0 26 B9
B6F2 18
B6F3 65 A1
B6F5 85 B8
ASL
ROL
ASL
ROL
CLC
ADC
STA
A ; X4.
NUMBER+1
NUMBER
PILOT
H. B. STEWART
B6F5 85 B8
STA
NUMBER
PILOT — H B. STEWART
B6F7 90 03
B6F9 E6 B9
B6FB 18
B6FC 68
B6FD 65 B8
B6FF 85 B8
B701 A5 B9
B703 65 A2
B705 85 B9
B707 4C D3 B6
B70A 60
B70B 84 A6
B70D B 5 80
B70F 85 A 7
B71 1 B5 81
B713 85 A8
B715 10 OA
B71 7 A2 27
B719 20 3F B6
B71C A9 2D
B71E 20 6F AF
B721 AO 00
B723 84 A9
B725 B9 70 B7
B728 85 A3
B72A B9 71 B7
B72D 85 A4
B72F 84 A5
B731 A9 30
B733 8D 51 05
B736 A2 27
B73 8 AO 23
B73A 20 90 B5
B73D A5 A8
B73F 30 05
BCC
INC
CLC
ASC020
NUMBER+1
i NO CARRY.
i CARRY — ADD TO MSB.
ASC020
PLA
ADC
STA
LDA
ADC
STA
JMP
NUMBER
NUMBER
NUMBER+1
TEMP+1
NUMBER+1
ASC010
i GET NEW DIGIT.
i ADD TO PARTIAL RESULT
DECASC — BINARY TO DECIMAL IN ASCII CONVERSION
CALLING SEQUENCE:
X = DTAB INDEX TO SIGNED VALUE
JSR DECASC
PRINTS RESULT TO 'CHOT' ROUTINE
USES ' TEMP ' +2 THRU 'TEMP '+5 'TEMP2' THRU / TEMP2 / +2
DECASC
DEC020
DEC030
DEC040
STY
LDA
STA
LDA
STA
BPL
LDX
JSR
LDA
JSR
LDY
STY
LDA
STA
LDA
STA
STY
LDA
STA
LDX
LDY
JSR
LDA
BMI
TEMP+5
DTAB, X
TEMP2
DTAB+1 , X
TEMP2+1
DEC020
#TEMP2— DTAB
DNEGI
CHOT
#0
TEMP2+2
PTEN, Y
TEMP+2
PTEN+1, Y
TEMP+3
TEMP+4
# '0
DIGIT
#TEMP2-DTAB
#TEMP+2-DTAB
DSUBI
TEMP2+1
DEC045
SAVE Y REGISTER.
MOVE DATA TO TEMPORARY STORAGE.
NUMBER IS POSITIVE.
NEGATE NUMBER.
PRINT LEADING MINUS SIGN.
PRINT A CHARACTER.
INITIALIZE CONVERSION INDEX . . .
& LEADING ZERO SUPPRESS FLAG.
GET POWER OF TEN.
SAVE INDEX TO TABLE.
INITIALIZE DIGIT.
PREPARE FOR SUCCESSIVE SUBTRACTION.
SEE IF RESULT IS NEGATIVE.
YES — ENOUGH ALREADY.
smell Form*
PILOT
H B STEWART
B741 EE 51 05
B744 DO F4
B746 20 80 B5
B749 A5 A9
B74B DO 09
B74D AD 51 05
B750 C9 30
B752 FO 08
B754 85 A9
B756 AD 51 05
B759 20 6F AF
B75C A4 A5
B75E C8
B75F C8
B760 CO OA
B762 DO Cl
B764 A5 A9
B766 DO 05
B768 A9 30
B76A 20 6F AF
B76D A4 A6
B76F 60
B770 10 27 E8
B773 03 64 00
B776 OA 00 01
B779 00
OOOA
INC
DIGIT
BNE
DEC040
DEC045
JSR
DADDI
LDA
TEMP2+2
BNE
DEC050
LDA
DIGIT
CMP
# '0
BEQ
DEC060
STA
TEMP2+2
DEC050
LDA
DIGIT
JSR
CHOT
DEC060
LDY
TEMP+4
I NY
I NY
CPY
#PTENL
BNE
DEC030
LDA
TEMP2+2
BNE
DEC070
LDA
#'0
*
JSR
CHOT
DEC070
LDY
TEMP+5
RTS
PTEN
. WORD
10000, 1000, IOC
* NO — KEEP SUBTRACTING.
> (BRA).
i NOW CORRECT FROM ONE TOO MANY SUBTRACTS.
i SEE IF NON-ZERO DIGIT HAS BEEN PRINTED YET
1 YES — PRINT ALL SUBSEQUENT DIGITS.
i NO — SEE IF THIS DIGIT IS ANOTHER ZERO.
i YES IT IS — SUPPRESS IT.
i NO — SET FLAG AND PRINT DIGIT.
; PRINT DIGIT.
; RESTORE TABLE INDEX.
; DONE?
; NO.
; WAS THE NUMBER = 0?
i NO.
; YES — PRINT SINGLE ZERO DIGIT.
; YES — RESTORE Y REGISTER .
; ... & RETURN.
i DECREASING POWERS OF TEN.
PTENL=*-PTEN
; TABLE LENGTH IN WORDS.
PILOT
H. B. STEWART
PILOT
H B STEWART
i
i
i
i
CNUMBR — CHECK ASCII CHARACTER FOR VALID NUMBER ( '0
CALLING SEQUENCE:
'9)
4
i
i
4
i
i
i
i
B77A
C9
30
CNUMBR
B77C
90
04
B77E
C9
3A
8780
90
02
B782
38
CNU010
B783
60
B7B4
E9
2F
CNU020
B786
18
B787
60
A « ASCII CHARACTER
JSR
CNUMBR
BCS
NOT DECIMAL
DIGIT
A *
BINARY DIGIT
CMP
# '0
4
BCC
CNU010
l
CMP
# '9*1
4
BCC
CNU020
4
SEC
RTS
4
SBC
# '0-1
4
CLC
RTS
4
< 'O?
YES — INVALID.
> '9?
NO — VALID DECIMAL DIGIT
SET CARRY FOR EXIT.
(ADJUST FOR CARRY CLEAR)
SET CC FOR EXIT
4
; CLETTR — CHECK ASCII CHARACTER FOR ALPHA LETTER < 'A
i
i CALLING SEQUENCE:
i
l A » ASCII CHARACTER
<
i JSR CLETTR
i BCS NOT ALPHA LETTER
)
i A * ASCII CHARACTER
B788
B78A
C9
90
41
04
CLETTR
CMP
BCC
# 'A
CLE010
4 < 'A?
4 YES — NOT ALPHA
B78C
B78E
C9
90
5B
01
CMP
BCC
# 'Z«-l
CLE020
4 > 'Z?
4 NO — VALID LETTER.
B790
38
CLE010
SEC
4 SET CARRY FOR EXIT.
B791
60
CLE020
RTS
'Z>
B792
B792 A5 AE
B794 85 3A
,• STMLST — SETUP LIST POINTER TO STATEMENT LIST
I
STMLST
SETPGL LDA
STA
S1L
LP
I 'LP'
'S1L ' .
PILOT
H B STEWART
■796 AS AF
B798 85 B8
B79A 60
81L«1
LP ♦ 1
B79B A5 B2
B79D 85 BA
B79F A5 B3
B7A1 85 BB
B7A3 60
' 8ET8VL - SETUP LIST POINTER TO NAMED STRING LIST
SETSVL l DA oni
82L i •LP 1 - 'S2L ' .
B7A4 20 88 B7
B7A7 90 OC
B7A9 48
B7AA 20 7A B7
B7AD 68
B7AE 90 05
B7B0 85 A 1
B7B2 C 5 A1
B7B4 60
B7B5 C9 FF
B7B7 60
' CKE0A CHECK FOR END OF ATOM < NON-ALPHANUMER IC CHARACTER)
i
i CALLING SEQUENCE.
CKEOA
A ® ASCII CHARACTER
JSR
CBEQ^
CKEOA
END OF ATOM
(NOT AN ALPHANUMERIC
JSR
CLETTR
i ALPHA LETTER?
BCC
CKE090
; YES.
PHA
JSR
CNUMBR
i NO — NUMERIC i
PLA
BCC
CKE090
i YES.
'STA
CMP
TEMP
TEMP
i NEITHER — SET
RTS
CKE090 CgMP
RTS
#*FF
B7B8 C8
B7B9 B 1 80
B7BB 20 A4 B7
B7BE DO F8
B7C0 60
SCEOA
— SCAN
TO END OF ATOM
I NY
LDA
< INLN ) , Y
JSR
CKEOA
; END OF
BNE
SCEOA— 1
i NO.
RTS
; YES —
YES — RETURN WITH CC SET.
PILOT — H. B. STEWART
SCNLBL — IDENTIFY (& SCAN TO END OF) LABEL
CALLING SEQUENCE:
Y = INDEX TO INPUT LINE.
i SCNLBL
i
IDENTIFY <& SCAN TO END OF) LABEL
PILOT — H. B. STEWART
; CALLING SEQUENCE:
Y = INDEX TO INPUT LINE.
JSR SCNLBL
BNE NO LABEL PRESENT (A = CODE).
Y = INDEX TO END OF LABEL + 1
i NOTE:
JUMPS
TO 'PSTOP'
B7C 1
20
EE
B7
SCNLBL
JSR
SKPSEP
B7C4
C9
2A
CMP
B7C6
FO
03
BEQ
SCL005
B7C8
A9
02
LDA
#IMPERR
B7CA
60
RTS
B7CB
C8
SCL005
INY
B7CC
B 1
80
LDA
( I NLN ) / Y
B7CE
20
A4
B7
JSR
CKEOA
B7D1
DO
E6
BNE
SCEOA
B7D3
A9
02
LDA
#ATMERR
B7D5
4C
6C
A1
JMP
PSTOP
IF INVALID LABEL NAME FOUND.
i SKIP LEADING BLANKS AND/OR COMMAS.
; LABEL PREFIX DELIMITER?
; YES.
; NO LABEL.
} SEE IF AT LEAST ONE ALPHANUMERIC.
i YES — SCAN TO END OF ATOM ?< RETURN.
; NO — INVALID LABEL NAME.
CHKSEP — CHECK FOR OPERAND SEPARATOR CHARACTER
CALLING SEQUENCE:
A = CHARACTER.
JSR CHKSEP
BNE NOT A SEPARATOR
B7D8 C9 20
CHKSEP CMP
# '
; BLANK?
B7DA FO OA
BEQ
CKS090
; YES.
B7DC C9 2C
CMP
; COMMA?
B7DE FO 06
BEQ
CKS090
; YES.
; *S* JMP CHKTRM ; END OF STATEMENT CHECK & RETURN.
; CHKTRM — CHECK FOR STATEMENT TERMINATOR (EOL OR 'I').
i CALLING SEQUENCE:
i
i A = CHARACTER.
9
} JSR CHKTRM
? BNE NOT STATEMENT TERMINATOR.
j
PILOT — H. B. STEWART
B7EO
B7E2
C9
FO
9B
02
CHKTRM
CMP
BEQ
#EOL
CKT090
B7E4
C9
SB
CMP
B7E6
B7E6
60
CKS090
CKT090
RTS
B7E7 20 FA B7
B7EA C9 3D
B7EC 60
CHKEQS — CHECK FOR EQUAL SIGN
CALLING SEQUENCE:
Y = ' INLN ' INDEX.
JSR
BEQ
CHKEQS
1ST NON-BLANK CHARACTER WAS '='.
Y = ' INLN ' INDEX TO 1ST NON-BLANK CHAR.
CHKEQS JSR
CMP
RTS
i SKIP LEADING BLANKS.
> RETURN WITH CC SET.
SKPSEP — SKIP OPERAND SEPARATOR (S)
CALLING SEQUENCE:
9
}
i
/
i
i
i NOTE:
Y =
INDEX TO INPUT LINE
JSR
Y =
ANY
SKPSEP
INDEX TO FIRST NON-SEPARATOR
STRING OF CONSECUTIVE BLANKS
FOUND
AND/OR
COMMAS
i
SEPARATOR.
B7ED
ce
i
I NY
B7EE
B 1
80
SKPSEP
LDA
( INLN), Y
B7F0
C9
20
CMP
#' ;
BLANK?
B7F2
FO
F9
BEQ
SKPSEP-l i
YES.
B7F 4
C9
2C
CMP
#'• i
COMMA?
B7F6
FO
F5
BEQ
SKPSEP-l ;
YES.
B7FQ
60
SKS090
RTS
9
i SLB —
SKIP
LEADING BLANKS
PILOT — H. B. STEWART
$
CALLING SEQUENCE:
#
I
PILOT — H. B. STEWART
CALLING SEQUENCE:
JSR SLB
A = FIRST NON-BLANK CHARACTER FOUND.
B7F9
C8
I NY
B7FA
B 1
80
SLB LDA
< INLN), Y
B7FC
C9
20
CMP
# ' i
B7FE
FO
F9
BEQ
SLB— 1 i
BSOO
60
RTS
; SCNEOL —
SCAN TO END OF LINE
B801
C8
I NY
B802
B 1
80
SCNEOL LDA
( INLN ) > Y
B804
C9
9B
CMP
#EOL
B806
DO
F9
BNE
SCNEOL-l
B808
60
RTS
BLANK?
YES — KEEP SCANNING.
; RETURN WITH CC SET.
B809
A2
36
B80B
20
CF
B80E
20
54
B811
A2
5C
B813
20
OE
B816
A9
20
B818
20
6F
B81B
C8
B81C
B 1
B6
B81E
AA
B81F
CE
FE
B822
C8
B823
B 1
B6
PSF — PRINT A STORAGE FORMAT LINE
CALLING SEQUENCE:
Y = INDEX TO LINE POINTER.
PSF
JSR
PSFOIO
. IF
JSR
. END IF
. IF
LDA
JSR
. END IF
I NY
LDA
TAX
DEC
I NY
LDA
PSF
#POINT-DTAB
DMOVI
GTLNNO
#L I NENO-DT AB
DECASC
DEBUG
SPACE
DEBUG-1
CHOT
i MOVE POINTER TO 'POINT ' .
i GET LINE # TO 'LINENO'.
; PRINT BINARY LINE #.
; PUT SPACE BETWEEN LINE # AND STATMENT.
i PUT SPACE BETWEEN LINE # AND STATEMENT.
; GET STATEMENT LENGTH.
; DISPLAY CONTROL CHARACTERS.
; PRINT STATEMENT BODY.
PILOT
H B STEWART
B829
20
6F
AF
JSR
B928
CA
DEX
B829
DO
F7
BNE
B92B
EE
FE
02
INC
B82E
60
RTS
CHOT
PSFOIO
DSPFLG i BACK TO ZERO.
B82F AO 00
B831 A9 20
B833 91 88
B835 84 8A
B837 C8
B838 84 8B
B83A 60
j
i
i
NULACC
SET THE ACCEPT BUFFER TO NULL (SINGLE SPACE)
NULACC LDY
#0
LDA
# '
STA
(ACLN), Y
STY
ACLN+2
I NY
STY
ACLN+3
RTS
» SINGLE SPACE,
i START INDEX.
i END INDEX.
*
; ZERVAR —
B83B
A2
34
t
ZERVAR
LDX
B83D
A9
00
LDA
B83F
9D
1A 05
ZNV010
STA
B842
CA
DEX
B843
DO
FA
BNE
ZERO NUMERIC VARIABLES
#52 ; 26 VARIABLES.
#0
VARTAB-1, X
ZNV010
B845 60
RTS
RETURN WITH CC AND A =
; ABRTCK —
BREAK KEY ABORT
CHECK
B846
48
ABRTCK
PHA
✓
(SEE ' XSYNC ' ).
BS47
A5
11
LDA
BREAK
i
OPERATOR ABORT?
B849
DO
07
BNE
ABC090
i
NO.
B84B
C6
1 1
DEC
BREAK
9
YES — RESET FLAG.
B84D
A9
87
LDA
#ABTERR
i
STOP WITH STATUS CODE.
BS4F
4C
6C A1
JMP
PSTOP
B852
68
ABC090
PLA
B853
60
RTS
; GTLNNQ — GET LINE # FROM STORAGE LINE
9
; CALLING SEQUENCE:
/
; 'POINT ' POINTS TO STORAGE LINE
|
i JSR GTLNNO
PILOT
H. B. STEWART
POINT
POINTS TO STORAGE LINE
JSR GTLNNO
PILOT — H. B. STEWART
'LINENO 7 = BINARY LINE #
Y = 4
B854
AO
03
GTLNNO LDY
#3
B856
B 1
B6
LDA
(POINT), Y
B858
85
DD
STA
LINENO+1
; RE-INVERT ORDER.
B85A
C8
I NY
B85B
B 1
B6
LDA
(POINT), Y
B85D
85
DC
STA
LINENO
B85F
60
RTS
i NEWLIN —
ISSUE NEW LINE
SEQUENCE TO 'CHOT 7
B860
A9
9B
NEWLIN LDA
#EOL
B862
4C
6F AF
JMP
CHOT
; NEWLINE & RETURN
i SPACE ( S ) — ISSUE SPACE < S ) TO 'CHOT 7
SPACES
. IF
L.DA
JSR
DEBUG
#'
CHOT
TWO SPACES.
SPACE L.DA # 7
JMP CHOT
. END IF
i ONE SPACE,
i RETURN.
CRSNOP — COMPLICATED NOP TO UPDATE CURSOR INHIBIT/ENABLE STATE
CALLING SEQUENCE:
; A =
0 TO ENABLE CURSOR,
ELSE DISABLE CURSOR.
E865
8D
FO
02
CRSNOP STA
CRSINH
; SET CURSOR INHIBIT FLAG.
B868
A9
1C
LDA
#CUP
; CURSOR UP . . .
B86A
20
6F
AF
JSR
CHOT
B86D
A9
ID
LDA
#CDOWN
; ... THEN DOWN . . .
B86F
4C
6F
AF
JMP
CHOT
i ... & RETURN.
; AUDCLR —
/
CLEAR AUDIO
REGISTERS AND SELECTS
B872
A9
03
AUDCLR LDA
#$03
; MAGIC CONSTANT
FROM D. CRANE, 27-AUG-79
B874
8D
32
02
STA
SSKCTL
B877
8D
OF
D2
STA
SKCTL
B87A
A9
00
LDA
#0
B87C
8D
08
D2
STA
AUDCTL
; SET AUDIO TO 4
INDEPENDENT REGISTERS.
PILOT
H. B. STEWART
BS7F
A2
08
LDX
BSS1
9D
FE
D1
AUCOIO STA
B884
9D
FF
D1
STA
B887
9D
53
05
STA
B88A
9D
54
05
STA
B88D
CA
DEX
B88E
CA
DEX
B88F
DO
FO
BNE
#AUREGS*2
AUDF1-
AUDC1-
AUDIOR-2, X
AUD I OR— 1 i X
AUCOIO
B891 60
RTS
01 CM
CLEAR ALL ACTIVE TONES.
CLEAR
SO' SELECTS.
PILOT
H. B. STEWART
BS92 A9 00
B894 85 91
B896 20 CA B8
B899 20 FA B7
B89C 84 A7
B89E 20 E8 A4
B8A1 DO IF
B8A3 C9 40
B8A5 DO IB
B8A7 A6 91
B8A9 EO OE
B8AB FO 18
B8AD A5 B6
B8AF 95 93
B8B 1 A5 B7
B8B3 95 94
B8B5 E8
B8B6 E 8
B8B7 86 91
B8B9 20 CA B8
B8BC 20 IB B9
B8BF 4C 99 B8
B8C2 A4 A7
B8C4 60
B8C5 A9 02
E8C7 4C 6C A1
EXP — ARITHMETIC EXPRESSION EVALUATOR
CALLING SEQUENCE:
'INLN' POINTS TO LINE TO BE EVALUATED
Y = INDEX TO START OF EXPRESSION
i
JSR
EXP
i
Y =
INDEX TO END 1
i
'EXPSTK'+O ?y 4-1 =
/
EXP
LDA
#0
STA
ESTKP
EXPRC
JSR
EXPVAL
EXP030
JSR
SLB
STY
TEMP2
JSR
ATOM
BNE
EXP080
CMP
#OPR
BNE
EXP080
LDX
ESTKP
CPX
#ESTKSZ
BEQ
EXP 1 92
LDA
POINT
STA
EXPSTK, X
LDA
POINT+1
STA
EXPSTK+1, X
I NX
INX
STX
ESTKP
JSR
EXPVAL
JSR
JMP
SOP
EXP 030
EXP080
LDY
RTS
TEMP2
EXP 192
LDA
#EXPERR
EXP 1 94
JMP
PSTOP
INITIALIZE CRITICAL VARIABLES.
CHECK FOR OPERAND ?y GET VALUE TO STACK.
SKIP LEADING BLANKS
SAVE INDEX.
CHECK FOR OPERATOR.
INVALID ATOM.
NOT AN OPERATOR.
PUSH OPERATOR ROUTINE ADDR TO EXP STACI
STACK FULL.
> CHECK FOR OPERAND & GET VALUE TO STACI*
; OPERATE ON STACK DATA.
EXPVAL VALIDATE OPERAND & PUSH VALUE TO STACK
CALLING SEQUENCE:
I
Y = INDEX TO 'INLN'
PILOT
H. B STEWART
BSC A 20 FA B7 EXPVAL
B8CD C9 2D
B8CF DO OD
B8D1 C8
B8D2 20 CA B8
B8D5 A5 91
B8D7 18
B8D8 69 1 1
B8DA AA
B8DB 4C 3F B6
JSR
EXPVAL
JSR
SLB
CMP
#
BNE
EXV010
I NY
JSR
EXPVAL
LDA
ESTKP
CLC
ADC
#EXPSTK-DTAB-2
TAX
JMP
DNEGI
B8DE C9 28
B8E0 DO OC
B8E2 C8
B8E3 20 96 B8
B8E6 B 1 80
B8E8 C9 29
B8EA DO D9
B8EC C8
B8ED 60
B8EE C9 3F
B8F0 DO OD
B8F2 AD OA D2
B8F5 85 B8
B8F7 AD OA D2
B8FA 85 B9
B8FC C8
BSFD DO 09
B8FF 20 E8 A4
B902 DO C3
B904 29 86
B906 FO BD
B908 A6 91
B90A EO OE
B90C FO B7
B90E A5 BS
B910 95 93
B912 A5 B9
B91 4 95 94
B91 6 E8
B91 7 E8
B918 86 91
B91 A 60
EXV010 CMP
BNE
I NY
JSR
LDA
CMP
BNE
I NY
RTS
EXV020 CMP
BNE
LDA
STA
LDA
STA
I NY
BNE
EXV030 JSR
BNE
AND
BEQ
EXV040 LDX
CPX
BEQ
LDA
STA
LDA
STA
I NX
I NX
STX
RTS
; SOP — STACK
# ' <
EXV020
EXPRC
( I NLN ) i Y
# ' )
EXP 1 92
# '?
EXV030
PKYRND
NUMBER
PKYRND
NUMBER+1
EXV040
ATOM
EXP 1 94
#NUM+NVAR+BPTR
EXP 192
ESTKP
#ESTKSZ
EXP 1 92
NUMBER
EXPSTK, X
NUMBER+1
EXPSTK+1 / X
ESTKP
r
OPERATE
PILOT — H. B. STEWART
; CALLING SEQUENCE:
UNARY MINUS?
NO.
YES.
*** RECURSIVE CALL ***
GET OFFSET TO RESULT.
NEGATE RESULT RETURN.
LEFT PAREN?
NO.
YES — EVALUATE SUB-EXPRESSION.
MATCHING RIGHT PAREN?
NO — ERROR.
YES — SKIP OVER IT.
RANDOM NUMBER?
NO.
YES — GET RANDOM # FROM POKEY.
SKIP OVER
(BRA).
ERROR.
NUMERIC VARIABLE, POINTER OR CONSTANT -7
NO — ERROR.
RESULT TO STACK.
STACK OVERFLOW.
i SOP
STACK OPERATE
PILOT — H. B STEWART
; CALLING SEQUENCE:
B91B A5 92
SOP
LDA
EXEC
B91D FO 1C
BEQ
S0P050
B91F 84 A7
STY
TEMP2
B921 A5 91
LDA
ESTKP
. IF
DEBUG
CMP
#6
BCC
S0P090
. END IF
B923 18
CLC
B924 69 11
ADC
#EXPSTK-
B926 A8
TAY
B927 AA
TAX
B92S CA
DEX
B929 CA
DEX
B92A B5 80
LDA
DTAB» X
B92C 8D 09 05
STA
SJUMP+1
B92F B5 81
LDA
DTAB+1 < X
B931 8D OA 05
STA
SJUMP+2
B934 CA
DEX
B935 CA
DEX
B936 20 08 05
JSR
S JUMP
B939 A4 A 7
LDY
TEMP2
B93B 38
S0P050
SEC
B93C A5 91
LDA
ESTKP
B93E E9 04
SBC
#4
B940 85 91
STA
ESTKP
B942 60
RTS
. IF
DEBUG
S0P090
LDA
#INTERR
JMP
PSTOP
. ENDIF
EXECUTE?
NO — JUST REJUSTIFY THE STACK.
GET EXP STACK INDEX.
SEE IF STACK HAS AT LEAST 3 ENTRIES
NO — PROBLEM!
YES — CONVERT STACK INDEX TO 'DTAB' INDEX.
INDEX TO OPERATOR PROCESSOR ADDRESS.
GET OPERATE ROUTINE ADDRESS.
INDEX TO TARGET ENTRY.
OPERATE ON DATA.
(CLEAR BORROW).
ADJUST STACK INDEX.
INTERNAL BUG.
PILOT
H B
STEWART
i TEXP
— EVALUATE TEXT EXPRESSION
V » POINTER TO START OF TEXT EXPR IN ' I NLN '
JSR
BNE
TEXP+2
TEXP+3
TEXP
EXECUTE MODE
B943 A5 92
TEXP
LDA
EXEC
»
B945 DO 03
BNE
TEX005
B947 4C 02 B8
JMP
SCNEOL
•
B94A A9 00
TEX005
LDA
#0
B94C 85 8F
STA
TELN+3
•
B94E 85 8E
STA
TELN+2
B950 AD 70 05
LDA
CDEST
B953 8D 71 05
STA
CDEST+1
9
B956 A9 FF
LDA
#*FF
B958 SD 70 05
STA
CDEST
9
B95B B 1 80
TEX010
LDA
< I NLN), Y
B95D 20 EO B7
JSR
CHKTRM
B960 FO 40
BEQ
TEX400
9
B962 C9 25
CMP
# '7.
B964 FO 13
BEQ
TEX 1 00
9
B966 C9 40
CMP
#
B968 FO OF
BEQ
TEX 100
END OF TEXT EXPRESSION.
THE EOL IS NOT PART OF THE RESULTANT TEXT.
i EXECUTE MODE?
YES.
NO — SCAN TO EOL & RETURN.
IN IT RESULT LENGTH COUNT . . .
. . . & STARTING INDEX.
SAVE 'CHOT' DESTINATION.
YES — RE-ROUTE 'CHOT' OUTPUT TO ' TEXBUF '
GET A CHARACTER.
STATEMENT TERMINATOR?
YES.
SPECIAL NUMBER?
YES.
; POINTER?
; YES.
E96A C9 23
B96C FO OB
B96E C 9 24
B970 FO 07
CMP
BEQ
CMP
BEQ
# '#
TEX 100
#'$
TEX 100
i NUMERIC VARIABLE DELIMITER?
; YES.
; STRING VARIABLE DELIMITER?
; YES.
B972 C8
TEX020
I NY
^9
B973 20 6F
AF
JSR
CHOT
f
YES — PRINT TEXT LITERAL.
B976 4C 5B
B9
JMP
TEX010
B979 48
TEX 100
PHA
}
SAVE THE TEXT CHARACTER.
#
B97A 98
TYA
1
SAVE THE Y REG.
B97B 48
PHA
($
B97C 20 E8
A4
JSR
ATOM
i
GET VALUE.
B97F FO 05
BEQ
TEX220
i
0. K.
#
B9S1 68
TEX210
PLA
i
NOT ATOM — RESTORE Y REG
B982 A8
TAY
B983 68
PLA
»
... & CHARACTER.
B984 DO EC
BNE
TEX020
i
(BRA).
B986 C9 10
TEX220
CMP
#USVAR
i
UNDEFINED STRING?
PILOT — H. B. STEWART
BEQ
TEX210
B988 FO F7
YES
PRINT LITERALLY.
BVDO V-V 1U
itx«.vu cnp
#USVAR
PILOT — H. B STEWART
B988
FO
F7
BEQ
TEX210
B98A
C9
08
CMP
#SVAR
B98C
FO
OA
BEQ
TEX300
* NUMERIC DATA
B98E
68
PLA
B98F
68
PLA
B990
A2
38
LDX
#NUMBER-DTAB
B992
20
OB
B7
JSR
DECASC
B993
4C
SB
B9
JMP
TEX010
i STRING VARIABLE
B998
68
TEX300
PLA
B999
68
PLA
B99A
A2
42
LDX
#DP-DTAB
B99C
20
33
B 1
JSR
PRTSTG
B99F
4C
5B
B9
JMP
TEX010
B9A2
AD
71
05
TEX400
LDA
CDEST+1
B9A5
8D
70
05
STA
CDEST
; |
EXTERNAL
ENTRY POINT FROM
B9A8
A6
8F
TRAILB
LDX
TELN+3
B9AA
E4
8E
CPX
TELN+2
B9AC
FO
OC
BEQ
TEX480
B9AE
BD
76
05
LDA
TEXBUF- 1 * X
B9B1
C9
5F
CMP
B9B3
DO
03
BNE
TEX480
B9B5
A9
20
LDA
# '
B9B7
9D
76
03
STA
TEXBUF- 1 > X
B9BA
A3
92
TEX480
LDA
EXEC
B9BC 60
RTS
UNDEFINED STRING?
i
i YES — PRINT LITERALLY.
i DEFINED STRING?
) YES — PRINT VALUE.
i NO — MUST BE NUMERIC VALUE.
i CLEAR STACK.
> VALUE OF NUMBER.
I CONVERT TO ASCII *< OUTPUT.
> CONTINUE.
; CLEAR THE STACK
i INDEX TO STRING VALUE.
i RESTORE 'CHOT' DESTINATION.
' XACCPT ' ***
i EXAMINE LAST CHAR OF TEXP.
l NULL RESULT.
j GET LAST CHAR IN BUFFER,
j UNDERSCORE?
j NO.
> YES — REPLACE WITH BLANK.
I THE CC IS BEING SET TO REFLECT THE STATE
i OF THE 'EXEC' FLAG BECAUSE EVERY SINGLE
i JSR TO 'TEXP' USED TO BE FOLLOWED BY A
, 'LDA EXEC' INSTRUCTION. THESE HAVE ALL BEEN
i BEEN "COMMENTED" QUTi WHEN WILL THIS ALL END?
PILOT
H. B. STEWART
0022
B93D A9 12
B9BF DO 06
B9C 1 A9 11
B9C3 DO 02
B9C5 A9 00
B9C7 85 22
B9C9 20 92 B8
B9CC A5 92
B9CE FO 08
B9D0 A5 93
B9D2 85 E6
B9D4 A5 94
B9D6 85 E7
B9D8 20 EE B7
B9DB 20 92 B8
B9DE A5 92
B9E0 FO 11
B9E2 A5 93
B9E4 85 E9
B9E6 A5 94
B9E8 85 EA
B9EA A9 00
B9EC 85 E8
B9EE 85 EB
B9F0 20 A7 BA
B9F3
B9F3 60
B9F4 20 92 B8
B9F7 A5 92
B9F9 FO F8
B9FB A5 93
B9FD 85 F2
B9FF A5 94
BA01 85 F3
i
i
i
herein reside the lower level graphics routines for pilot graphics.
PENPOS = ICCOMZ
; 'DRAWTO ' , 'FILLTO' «< "GOTO' SUB
GFILTO LDA
#F ILL
i
BNE
GGT005
i
GDRWTO LDA
#DRAW
i
BNE
GGT005
9
GGOTO LDA
#0
i
GGT005 STA
PENPOS
i
JSR
EXP
i
LDA
EXEC
i
BEQ
GGT010
i
LDA
EXPSTK
$
STA
GXNEW
LDA
EXPSTK+1
STA
GXNEW+1
GGT010 JSR
SKPSEP
9
JSR
EXP
9
LDA
EXEC
9
BEQ
GGT090
9
LDA
EXPSTK
9
STA
GYNEW
LDA
EXPSTK+1
STA
GYNEW+1
LDA
#0
9
STA
GXNEW+2
STA
GYNEW+2
JSR
GMOVE
9
GTT090
GGT090 RTS
9
GTRNTO JSR
EXP
9
LDA
EXEC
9
BEQ
GTT090
9
COMMAND PROCESSORS.
PEN DOWN.
(BRA).
PEN DOWN.
(BRA).
PEN UP.
SET PEN POSITION.
GET X-COORDINATE.
EXECUTE MODE?
NO.
YES — UPDATE X.
SKIP OPERAND SEPARATOR.
GET Y-COORDINATE.
EXECUTE MODE?
NO.
YES — UPDATE Y.
CLEAR FRACTIONAL PORTION OF X ?< Y
NOW EFFECT MOVE.
RETURN.
GET POLAR ANGLE.
EXECUTE MODE?
NO.
LDA EXPSTK ; YES — UPDATE POLAR ANGLE.
STA THETA
LDA EXPSTK+1
STA THETA+1
PILOT
H. B. STEWART
BA01 85 F3
EXPSTK+1
STA THETA+1
PILOT — H. B. STEWART
BA03
4C
41
BC
JMP
M0D360
EA06
A9
12
GFIL
LDA
#F ILL
BA08
DO
06
BNE
GG0005
BAOA
A9
11
GDRW
LDA
#DRAW
BAOC
DO
02
BNE
GG0005
BAOE
A9
00
GGO
LDA
#0
BA10
85
22
GG0005
STA
PENPOS
BA12
20
92
B8
JSR
EXP
BA1 5
A5
92
LDA
EXEC
BA17
FO
40
BEQ
GG0090
BA1 9
A9
01
LDA
#1
BA1B
20
C8
BC
JSR
SINVAL
BA1E
20
83
BD
JSR
TMULT
BA21
A2
69
LDX
#GYNEW~DTAB
BA23
20
C5
BD
JSR
TADDI
BA26
A9
00
LDA
#0
BA28
20
C8
BC
JSR
SINVAL
BA2B
20
83
BD
JSR
TMULT
BA2E
A2
66
LDX
#GXNEW-DTAB
BA30
20
C5
BD
JSR
TADDI
BA33
4C
A7
BA
JMP
GMOVE
BA36
20
92
B8
GTRN
JSR
EXP
BA39
A5
92
LDA
EXEC
EA3B
FO
1C
BEQ
GTR090
BA3D
84
AB
STY
XTEMP
BA3F
A2
72
LDX
#THETA-DTAB
BA41
AO
13
LDY
#EXPSTK-DTAB
BA43
20
80
B5
JSR
DADDI
BA46
A4
AB
LDY
XTEMP
BA48
4C
41
BC
JMP
M0D360
BA4B
A2
D3
GPEN
LDX
#PCTAB-CTAB
BA4D
20
10
A3
JSR
CMATCH
BA50
DO
08
BNE
GPN099
BA52
A5
92
LDA
EXEC
BA54
FO
03
BEQ
GPN090
BA56
8E
53
05
STX
PEN
BA59
GG0090
MODULO 360 & RETURN.
PEN DOWN.
PEN DOWN.
PEN UP.
SET PEN POSITION.
GET MAGNITUDE OP MOVE.
EXECUTE MODE?
NO.
COS (THETA) = SIN ( THETA+90 ) .
GY = GY + <<EXP> * COS (THETA))
GX = GX + ( <EXP> * SIN(THETA) )
NOW EFFECT MOVE RETURN.
POLAR ANGLE DELTA THETA.
EXECUTE MODE?
NO.
YES — SAVE INDEX.
THETA = THETA + DELTA.
MODULO 360 & RETURN.
MATCH OPERAND.
NO MATCH.
EXECUTE MODE?
NO.
YES
SET PEN COLOR.
PILOT — H B STEWART
BA59
BA59 60
BA5A 4C 6C A1
GTR090
GPN090 RTS
GPN099 JMP
PSTOP
BA5D A5 92
BA5F FO 38
BA61 84 AB
©EXIT LDA
BEQ
STY
EXEC
GEX090
i EXECUTE MODE?
i NO.
XTEMP
1 CL0SE GRAPHICS SCREEN BY CLOSING 'S' & 'E' AND OPENING 'E'
i CLOSE 'S'.
BA63 A2 20
LDX
# I 0CB2
BA65 20 FD BO
JSR
DCLOSE
BA68 A2 00
LDX
#1 OCBO
BA6A 20 FD BO
JSR ,
DCLOSE
i *S* LDX
#0
BA6D 8E 54 05
STX
GRFLAG
BA70 A9 45
LDA
#'E
BA72 8D 60 05
STA
OPNBUF
BA75 A9 9B
LDA
#EOL
BA77 8D 61 05
STA
OPNBUF+1
BA7A A9 OC
LDA
#OREAD+OWRIT
BA7C 20 B7 BO
JSR
DOPEN
i CLOSE 'E'.
i RESET GRAPHICS MODE FLAG,
i PUT "E" IN OPEN BUFFER.
OPEN
AGAIN.
; MOVE THE STRING STORAGE AREA UPWARD TO RE-CAPTURE THE SPACE USED
; BY THE GRAPHICS SCREEN.
; *** EXTERNAL ENTRY FROM 'INIT' ■***
'MBC '
BA7F 38
GEX050
SEC
i
BA80 A5 B4
LDA
S2H
BA82 E5 B2
SBC
S2L
BA84 85 DA
STA
MBC
BA86 A5 B5
LDA
S2H+1
BA88 E5 B3
SBC
S2L.+ 1
BA8A 85 DB
STA
MBC + 1
BA8C A5 B2
LDA
S2L
#
BA8E 85 D 6
STA
MSP
BA90 A5 B3
LDA
S2L+1
BA92 85 D7
STA
MSP + 1
BA94 20 77 BO
JSR
GS0100
i
BA97 A4 AB
LDY
XTEMP
BA99
GCL090
—
BA99 60
GEX090
RTS
,• *** CALLED BY
' XRUN ' TOO
'S2H '
' S2L ' (BYTE COUNT)
'MSP' = 'S2L ' (SOURCE)
; SETUP ADDITIONAL PARMS & MOVE THE DATA.
PILOT
H. B. STEWART
PILOT
H. B.
STEWART
BA9A
A5
92
GCLEAR LDA
EXEC
BA9C
FO
FB
BEQ
GCL090
BA9E
A9
00
LDA
#0
BAAO
85
54
STA
ROWCRS
BAAS
A9
7D
LDA
4CLEAR
BAA4
4C
3C B 1
JMP
TOUT
EXECUTE MODE?
NO.
TO AVOID ERROR $8D IF CURSOR AT LOWER
. .. RIGHT CORNER OF SCREEN.
VES — CLEAR GRAPHICS SCREEN . . .
. . . & RETURN.
H B STEWART
PILOT —
BAA7 84 EO
BAA9 AiT OC
BAAB
BAAO
BAAE
BABO
BAB2
BAB4
BAB6
BAB8
BABA
BABC
BABE
BABF
BACO
BAC 1
BAC3 AD 53 05
BAC6 8D FB 02
BAC9 8D FD 02
BACC C9 04
BACE FO 04
BADO A5 22
BAD2 DO 03
BAD4 4C BF BB
i LOWER LEVEL GRAPHICS UTILITIES
GMOVE STY i f
GMV010 ( LDA
ROL
LDA
ADC
STA
LDA
ADC
STA
LDA
GXNEW-1, X
A
GXNEW-3* X
#0
GX1-3, X
GXNEW-2, X
#0
GX 1 -2/ X
#0
i SAVE Y REGISTER
i 4 VARIABLES OF 3 BYTES EACH.
i MOVE COORDINATES TO WORKING VARIABLES.
; PREPARE TO ROUND.
i GET MIDDLE BYTE.
i ADD MSB OF FRACTION.
i GET MSB.
i CONTINUE ROUNDING,
i NOW CLEAR FRACTION.
v^STA
GX 1-1 > X
DEX~
DEX
DEX
BNE
GMV010
LDA
PEN
; PEN
COLOR = 7 UP 7 ?
STA
ATACHR
i SET
COLOR FOR DISPLAY
STA
FILDAT
i SET
FILL DATA TOO.
CMP
#PCUP
BEQ
GMV10B
i YES
— NO PLOTTING.
LDA
PENPOS
; PEN
POSITION?
BNE
GMV011
; DOWN.
JMP
GMV150
; UP.
BAD7 A2 4A
BAD9 AO 3E
BADB 20 CF B3
GMV011
LDX
LDY
JSR
#DELX-I)TAB
#GX1-DTAB
DMOVI
; COMPUTE DELTA X AND DELTA Y.
; "DELX 7 = 'GX1 7 . . .
BADE AO 44
LDY
4GX2-DTAB
; . . . - 7 GX2 7 .
BAEO 20 90 B5
JSR
DSUBI
BAE3 70 20
B VS
GMVOVF
i DELTA X EXCEEDS
MAXIMUM.
BAE5 A2 4C
LDX
#DELY-DTAB
; 7 DELY 7 = 7 GY1 7 .
BAE7 AO 41
LDY
#GY1-DTAB
BAE9 20 CF B3
JSR
DMOVI
BA EC AO 47
LDY
#GY2-DTAB
; . . . - 7 GY2 7 .
BAEE 20 90 B5
JSR
DSUBI
BA FI 70 12
B VS
GMVOVF
; DELTA Y EXCEEDS
MAXIMUM.
i
CHECK FOR
LINE SEGMENT WITHIN
SCREEN LIMITS
THE CLIPPING ALGORITHM USED HERE IS DESCRIBED IN SECTION 5~1 OF THE
SECOND EDITION OF "PRINCIPLES OF INTERACTIVE COMPUTER GRAPHICS" BY
NEWMAN & SPROULL.
BAF3 A2
3 E
GMV012
LDX
#GX1-DTAB
; TEST
END POINT.
BAF5 20
DD BB
JSR
INTEST
o
BAF8 85
F4
STA
GNUMB
i SAVE
RESULT.
BAFA A2
44
LDX
#GX2-DTAB
; TEST
END POINT.
BAFC 20
DD BB
JSR
INTEST
%
PILOT — H. B.
STEWART
PILOT
H. B STEWART
BAFF 85 F5
STA
GNUMB+1
BBOl 25 F4
AND
GNUMB
BB03 FO 03
BEQ
GMV013
BB05 4C D7 BB
GMVOVF JMP
GMV157
BB08 A5 F4
GMV013 LDA
GNUMB
BBOA 05 F5
ORA
GNUMB+1
BBOC DO 03
BNE
GMV014
BBOE 4C AO BB
JMP
GMV120
BB 1 1 A2 3E
GMV014 LDX
#GX 1-DTAB
BB 13 A5 F4
LDA
GNUMB
BB 1 5 DO 04
BNE
GMV015
BB 1 7 A2 44
LDX
#GX2-DTAB
BB 19 A5 F5
LDA
GNUMB+1
BB IB 48
GMV015 PHA
BB 1C 29 08
AND
#ELEFT
BB IE FO 08
BEQ
GMV020
BB20 A9 B 1
LDA
#-XC+l
BB22 85 CE
STA
GACC
BB24 A9 FF
LDA
#-l
BB26 DO OC
BNE
GMV025
BB28 68
GMV020 PLA
BB29 48
’ PHA
BB2A 29 04
AND
#ER IGHT
BB2C FO 33
BEQ
GMV030
BB2E A9 4F
LDA
#XC-1
BB30 85 CE
STA
GACC
BB32 A9 00
LDA
#0
BB34 85 CF
GMV025 STA
GACC+1
BB36 AO 4E
LDY
#GACC-DTAB
BB38 20 CF B3
JSR
DMOVI
BB3B 8A
TXA
BB3C 48
PHA
BB3D A2 4E
LDX
#GACC-DTAB
BB3F AO 6C
LDY
#GX-DTAB
BB41 20 BO BE
JSR
RSUBI
BB44 AO 4C
LDY
#DELY-DTAB
BB46 20 D9 BD
JSR
QMULT
BB49 AO 4A
LDY
#DELX-DTAB
BB4B 20 3C BE
JSR
GDI V
. IF
DEBUG
BNE
. ENDIF
GMV041
BB4E AO 6F
LDY
#GY-DTAB
BB50 20 A9 BE
JSR
RADDI
i
SAVE RESULT.
• PART OF LINE MAY BE IN SCREEN.
> NO PART OF LINE IS IN SCREEN.
' PART OF LINE IS OFF THE SCREEN.
; ALL OF LINE IS IN SCREEN.
; FIND AN INTERSECTION WITH AN EDGE
; IS XI, Y1 OUTSIDE SCREEN?
; YES.
i NO — THEN X2, Y2 MUST BE.
i SAVE INTERSECT STATUS,
i LEFT EDGE INTERSECTION?
i NO.
; YES — ' GACC ' = LEFT EDGE X VALUE.
; (BRA).
i GET STATUS.
; RIGHT EDGE INTERSECTION?
; NO.
i YES — 'GACC 7 = RIGHT EDGE X VALUE.
i EXTEND SIGN.
> GX1 OR GX2 = 'GACC'. v
; GY 1 OR GY2 = (GACC -GX ) * DELY / DELX + GY.
i OVERFLOW
DON'T DRAW.
PILOT — H. B. STEWART
BB53 68
PLA
BB54 AA
TAX
BB55 A5 CE
LDA
BB57 95 83
STA
BB59 A5 CF
LDA
BB5B 95 84
STA
BB5D 68
PLA
BB5E 4C F3 BA
JMP
BB61 68
GMV030 PLA
BB62 48
PHA
BB63 29 02
AND
BB65 FO 08
BEQ
BB67 A9 D1
LDA
BB69 85 CE
STA
BB6B A9 FF
LDA
BB6D DO 06
BNE
BB6F
GMV040
. IF
PLA
PHA
AND
BNE
GMV041 LDA
JMP
GMV042=*
. END IF
BB6F A9 2F
LDA
BB71 85 CE
STA
BB73 A9 00
LDA
BB75 85 CF
GMV045 STA
BB77 95 84
STA
BB79 A5 CE
LDA
BB7B 95 83
STA
BB7D 8A
TXA
BB7E 48
PHA
BB7F A2 4E
LDX
BB81 AO 6 F
LDY
BB83 20 BO BE
JSR
BB86 AO 4A
LDY
BB88 20 D9 BD
JSR
\
BEBB AO 4C
LDY
BB8D 20 3C BE
JSR
. IF
BNE
*
. END IF
BB90 AO 6C
LDY
BB92 20 A9 BE
JSR
BB95 68
PLA
BB96 AA
TAX
mL — 1 | ■ B
PILOT — H. B. STEWART
GACC
DTAB+3, X
GACC-t-1
DTAB+4/ X
GMV012
#EBOTOM
GMV040
#— YC+1
GACC
#-l
GMV045
DEBUG
#ETOP
GMV042
#INTERR
PSTOP
#YC — 1
GACC
#0
GACC+1
DTAB+4, X
GACC
DTAB+3, X
#GACC-DTAB
#GY-DTAB
RSUBI
#DELX-DTAB
QMULT
#DELY-DTAB
QDIV
DEBUG
GMV041
#GX-DTAB
RADDI
i CLEAR STACK.
; KEEP THIS UP UNTIL LINE SEGMENT IS CLIPPED
> GET STATUS.
; BOTTOM EDGE INTER SECT 1 0N">
; NO.
; YES — 'GACC 7 = BOTTOM EDGE Y VALUE.
; (BRA).
; GET STATUS.
J TOP EDGE INTERSECTION?
; YES.
; NO — IMPLEMENTATION BUG.
; 'GACC ' - TOP EDGE Y VALUE.
; EXTEND SIGN.
; GY I OR GY2 - 'GACC'.
; SAVE X REGISTER.
; GX1 OR GX2 = (GACC - GY) * DELX / DELY + QX
OVERFLOW.
DON'T DRAW.
PILOT — H. B. STEWART
BB97 AO 4E
BB99 20 CF B3
BB9C 68
BB9D 4C F3 BA
BBAO A2 00
BBA2 AO 3E
BBA4 20 96 BC
BBA7 A2 06
BBA9 AO 44
BBAB 20 96 BC
BBAE 20 37 BC
BBB1 A4 EO
BBB3 86 A 1
BBB5 84 A2
BBB7 A2 1A
BBB9 20 73 B1
BBBC 4C 7B AF
GMV120
LDY
#GACC-DTAB
JSR
DMOVI
PLA
JMP
GMV012
LDX
#0
LDY
#GX 1-DTAB
JSR
SETCUR
LDX
#OLDROW-ROWCRS
LDY
#GX2"DTAB
JSR
SETCUR
JSR
NEWCUR
LDY
LE
STX
TEMP
STY
TEMP+1
LDX
#SSPEC— I QVBAS
JSR
IOHAND
JMP
IOERCK
(GOTO
AND GO)
BBBF
A2
3E
GMV150
LDX
#GX 1-DTAB
BBC 1
20
DD
BB
JSR
INTEST
BBC4
DO
1 1
BNE
GMV157
BBC6
A2
00
LDX
#0
BBC8
AO
3E
LDY
#GX1-DTAB
BBCA
20
96
BC
JSR
SETCUR
BBCD
AD
53
05
LDA
PEN
BBDO
C9
04
CMP
#PCUP
BBD2
FO
03
BEQ
GMV157
BBD4
20
3C
B 1
JSR
TOUT
BBD7
20
37
BC
GMV157
JSR
NEWCUR
BBDA
A4
EO
LDY
LE
BBDC
60
RTS
CLEAR THE STACK.
KEEP THIS UP UNI IL LINE SEGMENT IS CLIPPED.
SET LINE SEGMENT END
. & START POINTS.
ESTABLISH NEW CURSOR LOCATION.
RESTORE Y REGISTER.
SAVE REGISTERS.
GO TO 'S: ' SPECIAL ENTRY.
CHECK FOR ERRORS b RETURN.
> CHECK FOR POINT IN SCREEN.
; NOT IN SCREEN — DON'T PLOT.
; SET NEW CURSOR POSITION.
CONVERT TO HANDLER COORDINATES.
PLOT SINGLE POINT.
PEN COLOR = 'UP 7 ?
YES — NO POINT PLOT.
ESTABLISH NEW CURSOR POSITION.
RESTORE Y REGISTER.
BBDD 84 A9
BBDF AO 27
BBE1 A9 00
BBE3 48
BBE4 85 A8
; INTEST — TEST FOR POINT WITHIN SCREEN LIMITS.
J
i CALLING SEQUENCE:
i
i X = DTAB OFFSET TO X, Y PAIR (EACH TRIPLE PRECISION)
JSR
BEQ
INTEST
POINT IN SCREEN
A = EDGE TEST BITS (OOOOLRBT), WHERE 1=0UT OF BOUNDS FOR THAT EDGE.
; SAVE Y REGISTER.
; INITIALIZE RESULT BYTE.
STY
TEMP2+2
LDY
#TEMP2-DTAB
LDA
#0
PHA
STA
TEMP2+1
PILOT
H. B STEWART
BBE6 B 5 81
LDA
DTAB+1, X
BBE8 30 OE
BMI
INT010
BBEA A9 50
LDA
#XC
BBEC 85 A 7
STA
TEMP2
BBEE 20 70 B5
JSR
DSCMI
BBF1 90 16
BCC
INT020
BBF3 68
PLA
BBF4 09 04
ORA
#ER IGHT
BBF6 DO 10
BNE
INT019
BBF8 A9 BO
INT010
LDA
#-XC
BBFA 85 A7
STA
TEMP2
BBFC C6 A8
DEC
TEMP2+1
BBFE 20 70 B5
JSR
DSCMI
BC01 90 02
BCC
INT012
BC03 DO 04
BNE
INT020
BC05 68
INT012
PLA
BC06 09 08
ORA
#ELEFT
BC08 48
INT019
PHA
BC09 E8
INT020
I NX
BCOA E8
INX
BCOB E8
INX
BCOC A9 00
LDA
#0
BCOE 85 AS
STA
TEMP2+1
BC1G B5 81
LDA
DTAB + 1 / X
BC12 10 12
BPL
INT030
BC 14 A9 DO LDA #-YC
BC 16 85 A7 STA TEMP2
BC1S C6 AS DEC TEMP2+1
BC 1 A 20 70 B5
JSR
DSCMI
BC1D 90 02
BCC
INT022
BC IF DO 12
BNE
INT040
BC21 68
INT022
PLA
BC22 09 02
ORA
#EBOTOM
BC 24 DO OC
BNE
INT039
BC 26 A9 30
INT030
LDA
#YC
BC28 85 A7
STA
TEMP2
BC2A 20 70 B5
JSR
DSCMI
BC2D 90 04
BCC
INT040
BC2F 68
PLA
BC30 09 01
ORA
#ETOP
BC32 48
INT039
PHA
BC33 A4 A9
INT040
LDY
TEMP2+2
BC35 68
PLA
BC36 60
RTS
PILOT
H. B. STEWART
CHECK SIGN OF POSITION.
NEGATIVE — COULDN'T BE BEYOND RIGHT EDGE.
SETUP RIGHT EDGE X POSITION.
TEST RIGHT EDGE.
INSIDE SCREEN.
OUTSIDE — SET STATUS BIT.
< BRA ) .
SETUP LEFT EDGE POSITION.
TEST LEFT EDGE.
OUTSIDE.
INSIDE.
OUTSIDE — SET STATUS BIT.
ADVANCE TO Y POSITION.
CHECK SIGN OF POSITION.
POSITIVE — COULDN'T BE BELOW BOTTOM EDGE.
SETUP BOTTOM EDGE POSITION.
TEST BOTTOM EDGE.
OUTSIDE.
INSIDE.
OUTSIDE — SET STATUS BIT.
< BRA ) .
SETUP TOP EDGE POSITION.
TEST TOP EDGE.
INSIDE.
OUTSIDE — SET STATUS BIT.
RESTORE Y REGISTER.
GET STATUS BYTE FOR EXIT.
PILOT
H. B. STEWART
; NEWCUR —
MOVE NEW CURSOR TO CURRENT CURSOR.
BC37
A2
06
i
NEWCUR LDX
#6 i 2 VARIABLES OF 3 BYTES EACH
BC39
B5
E5
NWC010 LDA
GXNEW-1 i X
BC3B
95
EB
STA
GX-1, X
BC3D
CA
DEX
BC3E
DO
F9
BNE
NWC010
BC40
60
RTS
; M0D360 —
'THETA ' = 'THETA'
MODULO 360
BC41
A5
F3
M0D360
LDA
THETA+1
9
SEE IF ANGLE IS NEGATIVE.
BC43
10
20
BPL
M0D020
9
NO.
BC45
A2
72
LDX
#THETA-DTAB
i
YES.
BC47
20
3F
B6
JSR
DNEGI
i
GET ABSOLUTE VALUE.
BC4A
A5
F3
LDA
THETA+1
i
THETA = 32768 IS A SPECIAL CASE.
BC4C
30
3F
BMI
M0D030
BC4E
20
41
BC
JSR
M0D360
9
*** RECURSIVE CALL ***
BC51
A5
F2
LDA
THETA
9
TEST FOR RESULT « 0.
BC 53
05
F3
ORA
THETA+1
BC55
FO
OD
BEQ
M0D019
9
YES — DONE.
BC57
A9
68
LDA
#360
9
NO — THETA = 360 - MOD ( ABS ( THETA
BC59
38
SEC
BC5A
E5
F2
SBC
THETA
BC5C
85
F2
STA
THETA
BC5E
A9
01
LDA
#360/256
BC60
E5
F3
SBC
THETA+1
BC62
85
F3
STA
THETA+1
BC64
60
M0D019
RTS
BC65
A5
F3
M0D020
LDA
THETA+1
9
COMPARE WITH 360.
BC67
C9
01
CMP
#360/256
BC69
DO
04
BNE
M0D025
BC6B
A5
F2
LDA
THETA
BC6D
C9
68
CMP
#360
BC6F
90
24
M0D025
BCC
M0D090
)
THETA < 360.
BC71
A9
68
LDA
#360
9
PREPARE TO DIVIDE BY 360.
BC73
85
A7
STA
TEMP2
BC75
A9
01
LDA
#360/256
BC77
85
AS
STA
TEMP2+1
BC79
84
A9
STY
TEMP2+2
BC7B
A2
72
LDX
#THETA-DTAB
BC7D
AO
27
LDY
#TEMP2-DTAB
BC7F
20
D5
B5
JSR
DDIVI
BC82
A4
A9
LDY
TEMP2+2
r
PILOT — H. B. STEWART
#
•
BC84 A5 A 1
BC86 85 F2
BC8S A5 A2
BC8A 85 F3
LDA
STA
LDA
STA
TEMP
THETA
TEMP+1
THETA+1
a
BC8C 60
RTS
a
a
BC8D A9 08
BC8F 85 F2
BC91 A9 00
BC93 85 F3
M0D030
LDA
STA
LDA
STA
#8
THETA
#0
THETA+1
BC95 60
M0D090
RTS
i REMAINDER IN 'TEMP' AFTER DIVIDE
32768 MOD 360 = 8
; SETCUR — SET HANDLER CURSOR
/
> CALLING SEQUENCE:
X = 0 FOR CURRENT CURSOR, 6 FOR PRIOR CURSOR.
Y = DTAB OFFSET TO TRIPLE PRECISION X, Y POSITION.
I
JSR
SETCUR
BC96 B9
BC99 18
80
00
SETCUR
LDA
CLC
DTAB, Y
BC9A 69
BC9C 95
50
55
ADC
STA
#XC
COLCRS, X
BC9E 38
SEC
BC9F A9
30
LDA
#YC
BCA 1 F9
83
00
SBC
DTAB+3, Y
BCA4 95
54
STA
ROWCRS, X
BCA6 60
RTS
; (CLEAR BORROW)
7
i
i GREAD — READ GRAPHICS DATA FROM SCREEN.
i
i CALLING SEQUENCE:
(
TO t:O CAT I O NTO ftfcAD.
JSR GREAD
A * VALUE OF PIXEL AT CURSOR LOCATION
BCA7
A5
92
GREAD
LDA
EXEC
#
EXECUTE MODE?
BCA9
FO
1C
BEQ
GRD090
i
NO.
BCAB
AD
54
05
LDA
GRFLAG
i
YES — GRAPHI
BCAE
FO
17
BEQ
GRD090
j '
NO.
BCBO
A2
3E
LDX
#GX1-DTAB^^
YES — CHECK 1
BCB2
20
DD
BB
JSR
INTEST
— CHECK FOR POINT IN SCREEN LIMITS.
PILOT — H. B STEWART
PILOT
H. B. STEWART
BCB5
DO
OE
BNE
GRD080
BCB7
98
TYA
BCB8
48
PHA
BCB9
A2
00
LDX
#0
BCBB
AO
3E
LDY
#GX l-DTAB i
BCBD
20
96
BC
JSR
SETCUR
BCCO
68
PLA
BCC 1
A8
TAY
BCC2
4C
30
B 1
JMP
TIN
BCC5
A9
00
GRDOSO
LDA
#0
BCC7
60
GRD090
RTS
J
i NOT IN LIMITS — RETURN VALUE OF ZERO
; SAVE Y REGISTER,
i SET CURSOR POSITION.
; RESTORE Y REGISTER.
; GET PIXEL VALUE & RETURN.
; RETURN VALUE OF ZERO.
PILOT
H. B. STEWART
BCC8 85 A3
BCCA 84 A4
BCCC AO 72
BCCE 20 9E B6
BCD1 A9 5A
BCD3 85 A1
BCD5 A9 00
BCD7 85 A2
SINVAL GET VALUE OF SI N ( THETA+A*90 )
CALLING SEQUENCE:
A = QUADRANT OFFSET (0-3)
'THETA' = ANGLE (0-359)
'-'SR SINVAL
'TEMP' = SIN (THETA + A*90 )
SINVAL STA
TEMP+2
; SAVE QUADRANT OFFSET.
STY
TEMP+3
LDY
#THETA— DTAB
; 'ACC' = 'THETA'
JSR
DLOADA
i X = 'ACC' - 'DTAB'.
LDA
#90
; 'TEMP ' = 90.
STA
TEMP
LDA
#90/256
STA
TEMP+1
/ NORMALIZE THETA TO 0 90 RANGE AND USE TRIG EQUALITIES TO COMPUTE SINE
BCD9 AO 21
SNVOl 0 LDY
#TEMP— DTAB
i
IS 'ACC' <= 90.
BCDB 20 63 B5
JSR
DCMPI
BCDE FO 09
BEQ
SNV020
i
YES.
BCEO 90 07
BCC
SNV020
i
YES.
BCE2 E6 A3
INC
TEMP+2
NOT YET — INCREMENT QUADRANT.
BCE4 20 90 B5
JSR
DSUBI
'ACC' = 'ACC' - 90.
BCE7 DO FO
BNE
SNV010
(BRA UNLESS RESULT = 0).
BCE 9 A6 E2
SNV020 LDX
ACC
RESULT IS 0 TO 90 FOR TABLE LOOKUP
BCEB A5 A3
LDA
TEMP+2
QUADRANT #.
BCED 29 03
AND
#$03
MODULO 4.
BCEF FO 18
BEQ
SNV100
QUADRANT 0.
BCF1 C9 01
CMP
#1
BCF3 DO 08
BNE
SNV040
BCF5 A9 5A
LDA
#90
/
QUADRANT 1.
BCF7 E5 E2
SBC
ACC
BCF9 AA
TAX
BCFA 4C 09 BD
JMP
SNV100
BCFD C9 02
SNV040 CMP
#2
BCFF FO 20
BEQ
SNV150
i
QUADRANT 2.
BD01 A9 5A
LDA
#90
#
QUADRANT 3.
BD03 E5 E2
SBC
ACC
BD05 AA
TAX
BD06 4C 21 BD
JMP
SNV150
BD09 A9 00
SNV100 LDA
#0
I
GET VALUE FROM TABLE.
BDOB EO 57
CPX
#87
i
87 THRU 90?
BDOD 90 08
BCC
SNV120
i
NO — USE TABLE.
BDOF 85 A1
STA
TEMP
$
SPECIAL CASE — FORCE TO 1.0.
BD11 A9 01
LDA
#1
PILOT — H. B. STEWART
CTA TCMP+1
n r\ < n oc A n
PILOT
H. B STEWART
BD13 85 A2
BD15 DO 12
BD17 85 A2
BD19 BD 2C BD
BD1C 85 A1
BD1E 4C 29 BD
BD21 20 09 BD
BD24 A2 21
BD26 20 3F B6
BD29 A4 A4
BD2B 60
SNV120
SNV150
SNV900
STA
TEMP+1
BNE
SNV900
STA
TEMP+1
LDA
SINTAB, X
STA
TEMP
JMP
SNV900
JSR
SNV100
LDX
#TEMP-DTAB
JSR
DNEGI
LDY
RTS
TEMP+3
; (BRA).
i MSB = 0.
; LSB = VALUE FROM TABLE.
i GET VALUE TO 'TEMP ' ***
i THEN NEGATE VALUE.
BD2C
BD2C 00 04 09
BD2F OD 12
BD31 16 IB IF
BD34 24 28
; SINE TABLE VALUES FOR 0 THROUGH 86
SINTAB=* SIN ( X ) * 256
. BYTE 0, 4, 9, 13, 18
• BYTE 22» 27/ 31/ 36/ 40
DEGREES
X
i 0-4
; 5-9
BD36 2C 31 35
. BYTE
44/ 49/ 53, 58, 62
10-14
BD39 3A 3E
i
BD3B 42 47 4B
BD3E 4F 53
. BYTE
66, 71, 75, 79, 83
i
15-19
BD40 58 5C 60
BD43 64 68
. BYTE
88, 92, 96, 100, 104
#
20-24
BD45 6C 70 74
. BYTE
108, 1 12, 116, 120, 124
25-29
BD48 78 7C
BD4A 80 84 88
BD4D 8B 8F
. BYTE
128, 132, 136, 139, 143
i
30-34
BD4F 93 96 9A
BD52 9E A1
. BYTE
147, 150, 154, 158, 161
9
35-39
BD54 A5 A8 AB
BD57 AF B2
. BYTE
165, 168, 171, 175, 178
i
40-44
BD59 B5 B8 BB
BD5C BE Cl
BD5E C4 C7 CA
BD61 CC CF
. BYTE
181, 184, 187, 190, 193
9
45-49
. BYTE
196, 199, 202, 204, 207
9
50-54
BD63 D2 D4 D7
BD66 D9 DB
. BYTE
210, 212, 215, 217, 219
9
55-59
. BYTE
222, 224, 226, 228, 230
9
60-64
BD68 DE EO E2
BD6B E4 E6
BD6D E8 EA EC
BD70 ED EF
. BYTE
232, 234, 236, 237, 239
9
65-69
BD72 FI F2 F3
BD75 F5 F6
. BYTE
241, 242, 243, 245, 246
9
70-74
BD77 F7 F8 F9
BD7A FA FB
BD7C FC FD FE
BD7F FE FF
. BYTE
247, 248, 249, 250, 251
9
75-79
. BYTE
252, 253, 254, 254, 255
9
80-84
BD81 FF FF
. BYTE
255, 255
9
85-86
PILOT
H. B STEWART
%
TMULT TRIPLE PRECISION MULTIPLY
CALLING SEQUENCE:
' EXPSTK ' = WORD OF SIGNED DATA
'TEMP' = WORD OF SIGNED DATA
i
JSR
TMULT
'GNUMB
'+1 = MSB
'GNUMB
'+0 = MIDD
'GNUMB
' +2 = LSB
BD83 A9 00
TMULT
LDA
#0
BD85 85 F4
STA
GNUMB
BD87 85 F5
STA
GNUMB+1
BD89 85 F6
STA
GNUMB+2
BD8B 85 A6
STA
TEMP+5
BD8D 85 A5
STA
TEMP+4
BD8F A5 A2
LDA
TEMP+1
BD91 10 02
BPL
TMU005
BD93 C6 A6
DEC
TEMP+5
BD95 A5 94
TMU005
LDA
EXPSTK+1
BD97 10 02
BPL
TMU008
BD99 C6 A5
DEC
TEMP+4
BD9B A2 18
TMU008
LDX
#24
BD9D 06 A 1
TMU010
ASL
TEMP
BD9F 26 A2
ROL
TEMP+1
BDA1 26 A6
ROL
TEMP+5
BDA3 90 13
BCC
TMU020
BDA5 18
BDA6 A5 F6
CLC
LDA
GNUMB+2
BDA8 65 93
ADC
EXPSTK
BDAA 85 F6
STA
GNUMB+2
BDAC A5 F4
LDA
GNUMB+O
BDAE 65 94
ADC
EXPSTK+1
BDBO 85 F4
STA
GNUMB+O
BDB2 A5 F5
LDA
GNUMB+1
BDB4 65 A5
ADC
TEMP+4
BDB6 85 F5
STA
GNUMB+1
BDB 8 CA
TMU020
DEX
BDB 9 FO 09
BEQ
TMU090
BDBB 06 F6
ASL
GNUMB+2
BDBD 26 F4
RDL
GNUMB+O
BDBF 26 F5
ROL
GNUMB+1
BDC 1 4C 9D BD
JMP
TMU010
BDC4 60
TMU090
RTS
CLEAR RESULT REGISTER.
SIGN EXTENSION BYTES.
EXTEND SIGN OF 'TEMP'
SIGN IS POSITIVE.
SIGN IS NEGATIVE.
EXTEND SIGN OF 'EXPSTK'.
SIGN IS POSITIVE.
SIGN IS NEGATIVE.
SETUP LOOP COUNT.
PILOT — H. B. STEWART
PILOT — H. B. STEWART
BDC5
BDC6
BDC8
BDCA
BDCC
BDCE
BDDO
BDD2
BDD4
BDD6
BDD8
18
B5 82
65 F6
95 82
B5 80
65 F4
95 80
B5 81
65 F5
95 81
60
TADDI — TRIPLE PRECISION ADDITION
CALLING SEQUENCE:
X = DTAB OFFSET
JSR TADDI
DTAB(X) = DTAB ( X ) + 'GNUMB'
MSB IS DTAB ( X+l ) , MIDDLE IS DTAB<X+0>, LSB IS DTAB(X+2)
NOTE:
TADDI
DTAB+2, X
GNUMB+2
DTAB+2; X
DTAB+O# X
GNUMB
DTAB+O, X
DTAB+1, X
GNUMB+1
DTAB + 1, X
QMULT — 16 * 16 YIELDING 32 BIT SIGNED MULTIPLY
CALLING SEQUENCE:
'GACC ' = 2 BYTE MULTIPLICAND.
Y = DTAB OFFSET TO 2 BYTE MULTIPLIER
i
JSR
QMULT
i
#
'GACC
' C 4 EYTEJ = '
BDD9 A2 04
#
QMULT
LDX
#4
BDDB B5 CD
QML010
LDA
GACC — 1 , X
BDDD 95 D1
STA
GTEMP-1 , X
BDDF A9 00
LDA
#0
BDE1 95 CD
STA
GACC-1 , X
BDE3 95 D5
STA
GTEMP2-1 , X
BDE5 CA
DEX
BDE6 DO F3
BNE
QML010
BDE8 B9 80 00
LDA
DTAB, Y
BDEB 85 D6
STA
GTEMP2
BDED B9 81 00
LDA
DTAB+1, Y
BDFO 85 D7
STA
GTEMP2+1
BDF2 10 06
BPL
QML015
BDF4 A9 FF
LDA
#-l
BDF6 85 D8
STA
GTEMP2+2
BDF8 85 D9
STA
GTEMP2+3
BDFA A5 D3
QML015
LDA
GTEMP+1
— ■
EXTEND SIGN.
PILOT — H. B, STEWART
5
BDFC 10 04
BPL
QML020
BDFE A9 FF
LDA
#-l
*
EXTEI
BEOO DO 02
BNE
QML022
i
(BRA
BE02 A9 00
QML020 LDA
#0
BE04 85 D4
QML022 STA
GTEMP+2
BEOS 85 D5
STA
GTEMP+3
BE08 A2 20
LDX
#32
j
SETUI
BEOA 06 D2
QML030 ASL
GTEMP
i
LONG
BEOC 26 D3
ROL
GTEMP+1
BEOE 26 D4
ROL
GTEMP+2
BE10 26 D5
ROL
GTEMP+3
BE12 90 19
BCC
QML040
#
MSB 1
BE14 18
CLC
i
BIT !
BE15 A5 CE
LDA
GACC
BE1 7 65 D6
ADC
GTEMP2
BE1 9 85 CE
STA
GACC
BE IB A5 CF
LDA
GACC+1
BE1D 65 D7
ADC
GTEMP2+1
BE IF 85 CF
STA
GACC+1
BE21 A5 DO
LDA
GACC+2
BE23 65 D8
ADC
GTEMP2+2
BE25 85 DO
STA
GACC+2
BE27 A5 D 1
LDA
GACC+3
BE29 65 D9
ADC
GTEMP2+3
BE2B 85 D1
STA
GACC+3
BE2D CA
QML040 DEX
i
DONE
BE2E FO OB
BEG
QML090
#
YES.
BE30 06 CE
ASL
GACC
i
LONG
BE32 26 CF
ROL
GACC+1
BE34 26 DO
ROL
GACC+2
BE36 26 D1
ROL
GACC+3
BE38 4C OA BE
JMP
QML030
BE3 B 60
QML090 RTS
i BIT SET — ADD TO PARTIAL.
GDI V — 32 DIVIDED BY 16 YIELDING 16 BIT SIGNED DIVIDE.
CALLING SEQUENCE:
'GACC ' = 4 BYTE DIVIDEND.
Y = DTAB OFFSET TO 2 BYTE DIVISOR.
JSR
BNE
QDIV
OVERFLOW
, GACC'C2 BYTE! = 'GACC'C4 BYTE! / 'DTAB'(Y)C2 BYTE]
X = DTAB OFFSET TO 'GACC'.
BE3C
QDIV
. IF
DEBUG
PILOT
H. B. STEWART
PILOT
H. B. STEWART
LDA
DTAB, Y
ORA
DTAB+1 , Y
BEQ
QDV097
. END IF
BE3C
A9
21
LDA
#32+1
BE3E
85
A1
STA
TEMP
BE40
A9
00
LDA
#0
BE42
85
D2
STA
GTEMP
BE44
85
D3
STA
GTEMP+1
BE46
B9
81
00
LDA
DTAB + 1, Y
BE49
85
A2
STA
TEMP+1
BE4B
10
08
BPL
QDV003
BE4D
98
TYA
BE4E
AA
TAX
BE4F
20
3F
B6
JSR
DNEGI
BE52
20
8F
BE
JSR
QNEGA
BE55
A5
D1
QDV003
LDA
GACC+3
BE57
85
A3
STA
TEMP+2
BE59
10
03
BPL
QDV006
BE5B
20
8F
BE
JSR
QNEGA
BE5E
A2
52
QDV006
LDX
#GTEMP-DTAB
BE60
18
CLC
BE61
26
CE
QDV010
ROL
GACC
BE63
26
CF
ROL
GACC+1
BE65
26
DO
ROL
GACC+2
BE67
26
D1
ROL
GACC+3
BE69
C6
A1
DEC
TEMP
BE6B
FO
OF
BEQ
QDV090
BE6D
26
D2
ROL
GTEMP
BE6F
26
D3
ROL
GTEMP+1
BE7 1
20
63
B5
JSR
DCMPI
BE74
90
EB
BCC
QDV010
BE76
20
90
B5
JSR
DSUBI
BE79
38
SEC
BE7A
BO
E5
BCS
QDV010
BE7C
A5
A3
GDV090
LDA
TEMP+2
BE7E
10
03
BPL
QDV093
BE80
20
8F
BE
JSR
QNEGA
BE83
A5
A2
QDV093
LDA
TEMP+1
BEB5
10
05
BPL
QDV096
BE87
98
TYA
BE88
AA
TAX
BE89
20
3F
B6
JSR
DNEGI
BE8C
A2
4E
QDV096
LDX
#GACC~DTAB
i CHECK FOR DIVIDE BY ZERO.
i LOOP COUNT.
; CLEAR REMAINDER TO START.
; SEE IF DIVISOR IS NEGATIVE.
; SAVE FOR LATER.
i NO.
; YES — NEGATE DIVISOR . . .
; . . . & DIVIDEND.
; SEE IF DIVIDEND IS NEGATIVE.
; SAVE FOR LATER.
I NO.
i YES — NEGATE IT.
i LONG ROTATE LEFT.
; DONE?
i YES.
t
; NO — REMAINDER * 2.
i IS REMAINDER < DIVISOR?
; YES.
; NO — CORRECT FOR THAT.
i (BRA).
; DONE — SEE IF RESULT IS TO BE NEGATED?
i NO.
; YES.
; SEE IF DIVISOR WAS NEGATED AT BEGINNING
; NO.
; YES — CORRECT FOR THAT.
; AS ADVERTISED.
PILOT
H. B STEWART
IF DEBUG
i CHECK FOR OVERFLOW IN RESULT
LDA
GACC+1
i
BPL
QDV098
i
LDA
GACC+2
AND
GACC+3
CHECK MSB OF USABLE PORTION
POSITIVE.
QDV097 CMP #-l
JMP QDV099
BE8E 60
GDV098
LDA
GACC+2
ORA
GACC+3
. END IF
QDV099
RTS
/ RETURN WITH CC SET.
,• GNEGA — 4 BYTE NEGATE
; CALLING SEQUENCE:
i
; JSR GNEGA
i
i 'GACC'C4 BYTE] = - 'GACC'C4 BYTE]
BE8F 38
BE90 A9 00
BE92 E5 CE
BE 94 85 CE
BE96 A9 00
BE98 E5 CF
BE9A 85 CF
BE9C A9 00
BE 9E E5 DO
BEAO 85 DO
BEA2 A9 00
BEA4 E5 D1
BEA6 85 D1
BEA8 60
GNEGA
SEC
LDA
#0
SBC
GACC
STA
GACC
LDA
#0
SBC
GACC+1
STA
GACC+1
LDA
#0
SBC
GACC+2
STA
GACC+2
LDA
#0
SBC
GACC+3
STA
GACC+3
RTS
; CLEAR BORROW.
; RADDI — DOUBLE PRECISION ADD WITH ROUND FROM FRACTION
BEA9
B9
82
00
t
RADDI LDA
DTAB+2/ Y
BEAC
2A
ROL
A v
BEAD
4C
81
B5
JMP
DADDIX
GET FRACTION.
MSB OF FRACTION TO CARRY.
; RSUBI — DOUBLE PRECISION SUBTRACT WITH BORROW FROM FRACTION
PILOT
H. B. STEWART
; RSUBI — DOUBLE PRECISION SUBTRACT WITH BORROW FROM FRACTION.
PILOT
H. B. STEWART
BEBO
B9
82
00
RSUBI
LDA
DTAB+2, Y
i GET FRACTION.
BEB3
49
80
EOR
#$80
; INVERT MSB OF FRACTION.
BEB5
2A
ROL
A
; INVERTED MSB TO CARRY.
BEB6
4C
91
B5
JMP
DSUBIX
; GPINIT —
INITIALIZE GRAPHICS
PARAMETERS (X/ Y, THETA & PEN COLOR)
BEB9
A9
02
GPINIT
LDA
#2
; PEN = YELLOW.
BEBB
8D
53
05
STA
PEN
BEBE
A2
OE
LDX
#14
; SET X, Y & THETA TO ZERO.
BECO
A9
00
LDA
#0
BEC2
95
E5
GP 1010
STA
GXNEW-1, X
BEC4
CA
DEX
BEC5
DO
FB
BNE
GP 1010
BEC7 60
RTS
PILOT
H. B. STEWART
BECS A2 08
BECA BD 53 05
BECD 85 B6
BECF ID 54 05
BED2 FO ID
BED4 BD 54 05
BED7 85 B7
BED9 30 04
BEDB AO 00
BEDD B 1 B6
BEDF 29 IF
BEE1 A8
BEE2 B9 F2 BE
BEE5 9D FE D1
BEE8 A9 A4
BEEA 9D FF D1
BEED CA
BEEE CA
BEEF DO D9
BEF1 60
i
i AUDIO TONE
i
GENERATION PROCESSOR
TONES
LDX
#AUREGS*2
i
T0N010
LDA
AUDIOR— 2i X
i
STA
POINT
ORA
AUDIOR — 1 , X
#
BEQ
T0N090
i
LDA
AUDIOR— 1 , X
/
STA
POINT+1
BMI
T0N020
i
LDY
#0
i
LDA
(POINT), Y
T0N020
AND
#*1F
/
TAY
LDA
AUDTAB, Y
#
STA
AUDF1-2, X
i
LDA
#*A4
i
STA
AUDC1-2, X
DEX
DEX
BNE
T0N010
T0N090 RTS
SETUP TO SCAN REGISTER ASSIGN TABLE
POINTER TO VARIABLE.
NULL ENTRY IF RESULT IS ZERO
END OF ENTRIES.
FINISH MOVING NON-NULL POINTER.
NUMERIC CONSTANT.
NOW GET VALUE.
MODULO 32.
GET FREQ FROM TABLE.
PUT IN HARDWARE.
QUARTER VOLUME.
BEF2
00
AUDTAB . BYTE
0 ; REST
BEF3
F3
E6
D9
. BYTE
243, 230, 217, 204, 193, 182
BEF6
CC
Cl
B6
BEF9
AC
A2
99
. BYTE
172, 162, 153, 144, 136, 128
BEFC
90
88
80
BEFF
79
72
6C
. BYTE
121, 114, 108, 102, 96, 91
BF02
66
60
5B
BF05
55
51
4C
. BYTE
85, 81, 76, 72, 68, 64
BF08
48
44
40
BFOB
3C
39
35
. BYTE
60, 57, 53, 50, 47, 45
BFOE
32
2F
2D
BF11
2A
. BYTE
42
PILOT — H. B. STEWART
,
t Mccjcnr
— MCCCA/5C PCKICCATnO
PILOT — H. B. STEWART
BF12
BF12 29 7F
BF14 AA
BF1 5 BD 42 BF
BF18 85 A7
BF1 A A9 BF
BF1C 85 A8
BF1E AO 00
BF20 B 1 A7
EF22 FO OE
BF24 C8
BF25 C9 9E
BF27 FO 06
BF29 20 6F AF
BF2C 4C 20 BF
BF2F 20 60 B8
BF32 60
i MESSOT — MESSAGE GENERATOR
I
; CALLING SEQUENCE:
! A = MESSAGE # (INDEX TO INTERNAL TABLE)
#
*
i
MESSOT=*
JSR
MESSOT
AND
#$7F
; MASK OFF SIGN BIT
. IF
DEBUG
BEQ
MS0100
; 0 IS ILLEGAL.
CMP
#MTSI Z+l
BCS
MS0100
; # IS TOO LARGE.
. END IF
. ENDIF
STA
LDA
. IF
ADC
. ENDIF
STA
LDY
MS0010 LDA
BEQ
I NY
CMP
BEQ
JSR
JMP
MS0020
MS0090
MS0100
MESTAB-1 / X
DEBUG
#MESO
TEMP2
#MES0/256
DEBUG
#0
(TEMP2), Y
MS0090
#EOL
MS0020
CHOT
MS0010
NEWLIN
DEBUG
ACC
#0
ACC + 1
#14
MESSOT
#ACC-DTAB
DECASC
NEWLIN
; GET MESSAGE ADDRESS DELTA FROM TABLE,
i ADD TO BASE ADDRESS.
; DONE (NO EOL AT END),
i BUMP POINTER.
i DONE.
; PRINT # INSTEAD OF CANNED MESSAGE.
j *** RECURSIVE CALL ***
Moore Forrm Inc
PILOT
H. B. STEWART
; RDYMES —
GENERATE "READY"
MESSAGE SEQUENCE.
BF33
84
A9
RDYMES STY
TEMP2+2
i SAVE Y REG.
BF35
20
60
B8
JSR
NEWLIN
BF3S
A9
01
LDA
#RDYTXT
; "READY" TEXT
BF3A
20
12
BF
JSR
MESSOT
BF3D
20
60
B8
JSR
NEWLIN
BF40
A4
A9
LDY
TEMP2+2
BF42
60
RTS
PILOT
H. B. STEWART
BF43
5B
BF44
61
BF45
6E
BF46
7D
BF47
89
BF48
8E
BF49
5B
BF4A
99
BF4B
9F
BF4C
A7
BF4D
AE
BF4E
61
BF4F
BA
BF50
61
BF51
61
BF52
61
BF53
61
BF54
61
BF55
61
BF56
61
BF57
61
BF58
C2
BF59
D5
BF5A
DO
0018
; TABLE OF MESSAGE ADDRESSES
i
MESTAB . BYTE MES1-ME50
. BYTE MES2-MES0
■ BYTE MES3-MES0
. BYTE MES4-MES0
. BYTE MES5-MESO
. BYTE MES6-MES0
. BYTE MES7-MES0
• BYTE MES8-MES0
. BYTE MES9-MES0
. BYTE MESIO-MESO
• BYTE MES11-MESO
. BYTE MES12-MES0
. BYTE MES13-MES0
. BYTE MES14-MES0
■BYTE MES1 5-MESO
. BYTE MES16-MES0
. BYTE MES17-MES0
. BYTE MES18-MES0
. BYTE MES19-MES0
. BYTE MES20-MES0
. BYTE MES21-MES0
. BYTE MES22-MES0
. BYTE MES23-MES0
. BYTE MES24-MES0
MTSIZ = MESTAB
BF5B
BFOO
; IF 'DEBUG ' = 0 THEN ALL MESSAGES MUST FIT IN ONE MEMORY PAGE.
MESO=* ; MESSAGE DATA BASE ADDRESS
. IF DEBUG-1
MES0=MES0/256*256 i PAGE ALIGN BASE ADDRESS
. END IF
BF5B MES7
BF5B 52 45 41 MES1 .BYTE "READY", O
BF5E 44 59 00
BF61
MES12
BF61
MES14
BF61
MES15
BF61
MES16
BF61
MES17
BF61
MES18
BF61
MES19
BF61
MES20
BF61
MES21
BF61 57 48 41
MES2
BF64 54 27 53
BF67 20 54 48
BF6A 41 54 3F
BF6D 00
. IF DEBUG-1
. END IF
.BYTE "WHAT'S THAT?", 0
BF6E 49 4D 4D MES3
. BYTE
"IMMEDIATE 0NLY",0
PILOT
H. B STEWART
BF7 1 45 44 49
BF74 41 54 45
BF77 20 4F 4E
BF7A 4C 59 00
BF7D 44 49 56
BFBO 49 44 45
BF33 20 42 59
BF86 20 30 00
MES4
. BYTE
"DIVIDE BY 0", 0
BF89 4F 4F 50
BF8C 53 00
MES5
. BYTE
"OOPS", 0
BF8E 49 2F 4F
BF91 20 45 52
BF94 52 4 F 52
BF97 20 00
MES6
. BYTE
"I/O ERROR ", 0
BF99 20 2A 2A
BF9C 2A 20 00
MES8
. BYTE
" **■* ", 0
BF9F 4E 4F 20
BFA2 52 4F 4F
BFA5 4D 00
MES9
. BYTE
"NO ROOM " , 0
BFA7 57 48 45
BFAA 52 45 3F
BFAD 00
MES 1 0
. BYTE
"WHERE?", 0
BFAE 55 3A 20
BFB 1 54 4F 4F
BFB4 20 44 45
BFB7 45 50 00
MESH
. BYTE
"U: TOO DEEP " , 0
MES 12
. IF
. BYTE
. ENDIF
DEBUG
"BUG! ", 0
BFBA 4C 49 4E
BFBD 45 20 23
BFCO 3F 00
MES 13
. BYTE
"LINE #?",0
MES 14
. IF
. BYTE
DEBUG
"ERROR #",0
MES 15
. BYTE
"PLEASE SHORTEN",
MES 16
. BYTE
"$ VARS: ", EOL
MES 17
. BYTE
"# VARS: ", EOL
MES18
. BYTE
"USE STACK: ", EOL
MES 19
. BYTE
"GR PARMS: " , EOL
MES20
. BYTE
"THETA=", 0
MES21
. BYTE
. ENDIF
"FREE MEMORY=" , 0
f PILOT — H. B. STEWART
EOL
PILOT
H. B. STEWART
BFC2
54
4F
4F
MES22
. BYTE
BFC5
20
4D
41
BFC8
4E
59
20
BFCB
49
2F
4F
BFCE
53
00
BFDO
2D
2D
3E
MES24
. BYTE
BFD3
20
00
00D5
TABLEN=
*-MESO
BFD5
41
54
41
MES23
. BYTE
BFD8
52
49
20
BFDB
50
49
4C
BFDE
4F
54
20
BFE1
28
43
29
BFE4
20
43
4F
BFE7
50
59
52
BFEA
49
47
48
BFED
54
20
41
BFFO
54
41
52
BFF3
49
20
31
BFF6
39
38
30
BFF9
9B
*=$BFFA
BFFA
78
AO
. WORD
BFFC
00
05
. BYTE
BFFE
68
A 1
. WORD
. END
"TOO MANY I/0S",0
" — > ",0
i MUST NOT EXCEED OOFF HEX.
"ATARI PILOT <C) COPYRIGHT ATARI 1980", EOL
i
CARTRIDGE OVERHEAD.
MLE
$00, $05 i
PUP ;
RESTART VECTOR.
I.D. , BOOT DOS & START CARTRIDGE.
POWER-UP VECTOR.
PILOT
H B STEWART
SYMBOL TABLE
ABC090 B852
ABRTCK
. B846
ABTERR
0087
ACC
ACCLNO OOFE
ACLN
0088
ACOLR 1
0087
ACOLR2
A INC OOFB
ALINE
OOF 9
appmhi
OOOE
A8C010
ASC020 B6FC
ASC090
B70A
ASCDEC
B6B2
ATACHR
ATM003 A4FF
ATM003
A306
ATM010
A30E
ATM020
ATM099 A 320
ATM 100
A323
ATM200
A528
ATM230
ATM233 A33A
ATM260
A37C
ATM270
A383
ATM290
ATM300 A38B
ATM320
A3A6
ATM330
A5B6
ATM340
ATM330 A3B0
ATM360
A3D3
ATM400
A3D4
ATM300
ATM600 A3E1
ATM700
A3F2
ATM720
A3EF
ATM730
ATM740 A639
ATM745
A64D
ATM760
A632
ATM761
ATM770 A 662
ATM7B0
A67 1
ATM781
A673
ATM782
ATM784 A67F
ATM786
A683
ATM788
A68A
ATM790
ATM795 A696
ATM796
A69B
ATM797
A6A2
ATM798
ATM79B A6AB
ATM800
A6B3
ATM890
A6C 1
ATM895
ATM900 A6C5
ATMERR
0002
ATMRET
A6D7
ATOM
AT0M2 A4EB
AUC010
B881
AUDC1
D201
AUDCLR
AUDCTL D208
AUDF1
D200
AUDI OR
0555
AUDTAB
AUREGS 0004
AUTO IN
0576
AUTOXT
0081
AUX 1
AUX2 055E
BELL
OOFD
BPTR
0080
BREAK
BUFPNT B 1 48
BYELOC
E47 1
CASSOF
OOBC
CASSON
CCTAB A427
CDA
A449
CDAUTO
A43B
CDC
CDCAL A43F
CDCASS
A443
CDCLR
A499
CDDIV
CDDONE A46D
CDDOS
A435
CDDRW
A489
CDDRWT
CDDUMP A431
CDE
A44F
CDEQ
A47F
CDEST
CDEXIT A49B
CDFIL
A495
CDFILT
A493
CDG
CDGE A47B
CDGO
A49 1
CDGOTO
A48F
CDGT
CDIN A469
CDJ
A453
CDJM
A451
CDLE
CDLIST A42F
CDLOAD
A437
CDLT
A481
CDM
CDMOD A485
CDMS
A457
CDMUL
A477
CDN
CDNE A479
CDNEW
A465
CDNEWV
A467
CDOUT
CDOWN 001 D
CDPEN
A497
CDPLUS
A47 1
CDPOS
CDR A45D
CDREN
A43D
CDRUN
A433
CDS
CDSAVE A439
CDSUB
A473
CDSYNC
A445
CDT
CDTAB A42F
CDTRC
A441
CDTRN
A48D
CDTRNT
CDU A44D
CDW
A45F
CDY
A461
CH
CHKDEV B26C
CHKEGS
B7E7
CHKLN
AF63
CHKSE.P
CHKTRM B7E0
CH0100
AF86
CHOI 10
AF8F
CH0120
CHOT AF6F
CIO
E456
CKD010
B27C
CKD090
CKE090 B7B5
CKEOA
B7A4
CKS090
B7E6
CKT090
CLE010 B790
CLE020
B79 1
CLEAR
007D
CLEFT
CLETTR B788
CLM010
B239
CLN090
AF6E
CLOSE
CLOSEM B237
CLRPRG
A9FF
CMA005
A3 16
CMA010
CMA020 A321
CMA070
A331
CMAT2
A3 13
CMATCH
CND010 A4AD
CND015
A4B7
CND017
A4B9
CND030
CND032 A4CE
CND040
A4D2
CND050
A4D5
CND070
CND080 A4DB
CNDERR
0002
CNU010
B782
CNU020
CNUMBR B77A
COLORS
0055
COLORO
02C4
COMBUF
COND A49D
CRIGHT
00 IF
CRSINH
02F0
CRSNOP
CTAB A33A
CTABC
A36E
CTAB I
A33A
CTABR
CTABXR 054F
CUP
001C
DADDA
B6A8
DADDI
DADDIX B581
DADDP
B651
DADDS
B64D
DCLOSE
DCM010 B56A
DCM090
B56F
DCMPA
B6AD
DCMPI
DCWCI B55D
DDA010
B65A
DDA030
B65B
DDA040
DDI003 B5E2
DDI006
B5FB
DDI008
B604
DDI010
DDI090 B620
DDI092
B627
DDI093
B62B
DDI095
DDIVI B5D5
DEBUG
0000
DEC020
B721
DEC030
DEC040 B73A
DEC045
B746
DEC050
B756
DEC060
DEC 070 B76D
DECASC
B70B
DELX
OOCA
DELY
PILOT
H. B. STEWART
OOE2
0086
B6D3
02FB
A316
A54F
A587
A5BA
A3DD
A628
A655
A67B
A691
A6AE
A6C2
A4E8
B872
BEF2
055D
0011
00B4
A44B
A475
A487
0570
A455
A483
A47D
A459
A463
A46B
A46F
A45B
A447
A48B
02FC
B7D8
AF99
B249
B7E6
00 IE
OOOC
A3 17
A310
A4BD
A4DA
B784
0676
B865
A359
B580
BOFD
B563
B664
B605
B632
B725
B75C
OOCC
PILOT
H. B. STEWART
DEQTI
B665
DFA010
B697
DFALSE
B695
DGETI
DGTTI
B673
DIGIT
0551
DIN
B 1 1 1
D I 0003
D I 0005
B 121
DI0010
B10C
DIVERR
0084
DLETI
DLOADA
B69E
DLTTI
B67C
DMODI
B633
DMOVI
DMU010
B5AC
DMU020
B5C 1
DMU090
B5CC
DMULI
DNAME
B09C-
DNEGI
B63F
DNETI
B66C
DNSIZE
D0P005
B0E6
D0P007
B0F7
D0P010
B IOC
DOPEN
DOSVEC
OOOA
DOUT
B1 16
DP
00C2
DRAW
DSCMI
B570
DSPFLG
02FE
DSTORA
B6A3
DSUBI
DSUBIX
B591
DTAB
0080
DTRUE
B69 1
EBOTOM
ELEFT
0008
ELEVEL
0002
ENDERR
0081
EOL
EOPERR
0081
EPUTC
E406
ERIGHT
0004
ESTKP
ESTKSZ
OOOE
ETOP
0001
EXC010
A2AC
EXC015
EXC020
A2C 1
EXC030
A2DE
EXC040
A2E2
EXC050
EXC070
A2FE
EXC900
A30F
EXCMND
A2AA
EXEC
EXECF
OOFE
EXP
B892
EXP030
B899
EXP080
EXP 192
B8C5
EXP 194
B8C7
EXPERR
0002
EXPRC
EXPSTK
0093
EXPVAL
B8CA
EXV010
B8DE
EXV020
EXV030
B8FF
EXV040
B908
FILDAT
02FD
FILERR
FILL
0012
FNAME
B09F
FND010
B228
FND090
FNDIOB
B226
FNM010
B0A1
FNM020
BOB 1
GACC
0CL090
BA99
GCLEAR
BA9A
GCM090
AC3F
GCM100
GCM200
AC 53
GCM220
AC6D
GCM240
AC85
GCM300
GCM390
AC9A
GCOMND
AC 19
GDRW
BAOA
GDRWTO
GEC010
A226
GEC020
A240
GEC100
A24A
GEC200
GEC210
A299
GEC220
A29F
GEC250
A2A2
GETC
GETCOM
A21D
GETLIN
AF9E
GETR
0005
GEX050
GEX090
BA99
GEXIT
BA5D
GFIL
BA06
GFILTO
GGO
BAOE
GG0005
BA10
GG0090
BA59
GGOTO
GGT005
B9C7
GG TO 10
B9D8
GGT090
B9F3
GJUMP
GMOVE
BAA7
GMV010
BAAB
GMV01 1
BAD7
GMV012
GMV013
BB08
GMV014
BB11
GMV015
BB IB
GMV020
GMV025
BB34
GMV030
BB6 1
GMV040
BB6F
GMV045
GMV10B
BAD4
GMV120
BBAO
GMV150
BBBF
GMV157
GMVOVF
BB05
GNUMB
00F4
GPEN
BA4B
GP 1010
GPINIT
BEB9
GPN090
BA59
GPN099
BA5A
GRD080
GRD090
BCC7
GREAD
BCA7
GRFLAG
0554
GSMODE
GS0020
B052
GS0090
B071
GS0100
B077
GSOPEN
GTAB
A3D1
GTEMP
00D2
GTEMP2
00D6
GTL010
GTL020
AFC5
GTLNNO
B854
GTR090
BA59
GTRN
GTRNTO
B9F4
GTT090
B9F3
GX
OOEC
GX1
GX2
00C4
GXNEW
00E6
GY
OOEF
GY 1
GY2
00C7
GYNEW
00E9
ICAUX1
034A
ICAUX2
ICBAH
0345
ICBAL
0344
ICBLH
0349
ICBLL
ICCOM
0342
ICCOMZ
0022
ICDNO
0341
ICHID
IC0050
E358
IC0090
B373
ICOMP
B334
ICRLH
ICRLL
0346
ICSTA
0343
IFI020
B312
IF 1080
IF 1090
B333
I FIND
B2FE
ILENG
B3A9
IMATCH
IMPERR
0002
IMT010
B37C
IMT090
B392
INI01Q
INI015
A049
INIT
AOOO
INLN
0080
INSERR
INTO 10
BBF8
INT012
BC05
INT019
BC08
INT020
INT022
BC21
INT030
BC26
INT039
BC32
INT040
INTERR
008C
INTEST
BBDD
INVFLG
02B6
IOCBO
I0CB1
0010
I0CB2
0020
I0CB3
0030
I0CB4
I0CB7
0070
IOCBSZ
0010
I0E010
AF7F
IOEDIS
IOERCK
AF7B
IOERR
0086
IOHAND
B 1 73
IOSTAT
IOVBAS
E400
IVCERR
0002
JNKERR
0002
LDELET
LE
OOEO
LFTSTG
A9A9
LINENO
OODC
LINLNG
LINSRT
A 1 F2
LISTER
AE30
LMARGN
0052
LNOERR
LOADFG
0572
LP
OOBA
LPENH
0234
LPENV
B683
B1 19
B68A
B3CF
B5A2
OOOF
B0B7
0011
B590
0002
009B
0091
A2B9
A2FA
0092
B8C2
B896
B8EE
0096
B236
OOCE
AC42
AC8D
B9C 1
A254
0007
BA7F
B9BD
B9C5
0505
BAF3
BB28
BB75
BBD7
BEC2
BCC5
06F 1
AFD5
AFB8
BA36
OOBE
00C1
034B
0348
0340
0347
B331
B374
AOOB
0089
BC09
BC33
0000
0040
0500
00E4
A206
007A
008D
0235
PILOT
H B STEWART
LS OODE
LSENO
0005
LVAUTO
A1 59
MAKSTO
MALI 00 B469
MAL200 B494
MAL300
B4A1
MALLOC
MATCHF OOFD
MATCHX
0573
MATSTG
A9AE
MAXLN
MBC OODA
MDA10C
► B4E 1
MDEALL
B4A4
MDP
MEMA OOD2
MEMB
OOD4
MEMHI
02E5
MEMLO
MESO BFOO
MES1
BF5B
MES10
BFA7
MESH
MES12 BF61
MES13
BFBA
MES14
BF61
MES15
MES16 BF6 1
MES17
BF61
MES18
BF61
MES19
MES2 BF 61
MES20
BF61
MES21
BF61
MES22
MES23 BFD5
MES24
BFDO
MES3
BF6E
MES4
MES5 BF89
MES6
BF8E
MES7
BF5B
MES8
MES9 BF9F
MESSOT
BF 1 2
MESTAB
BF43
MFDEL
ML E A078
MLLOAD
A09F
ML0030
AOCO
ML0080
ML0082 A0E4
ML0085
A0E6
ML0089
A0E9
ML0100
ML0110 A0F9
ML0112
AOFC
ML0140
A 1 2E
ML0150
ML0155 A13B
ML0160
A148
ML0200
A 169
ML0900
ML0945 A19B
ML0947
A 1 9F
ML0950
A1 AB
ML0960
ML0963 A1C4
ML0981
A 1 D9
ML0982
A1E7
ML0985
ML0990 A1EF
MLOOP
A0A7
MLRES
A07E
M0D019
MOD020 BC65
M0D025
BC6F
M0D030
BC8D
M0D090
M0D360 BC41
MOVDA
B530
MOV I A
B50C
MP
MSEND OOOB
MS0010
BF20
MS0020
BF2F
MS0090
MSP 00D6
MTSIZ
0018
MVD010
B546
MVD020
MVD090 B55C
MV I 010
B51 5
MV I 020
B520
MVI030
MV I 090 B52F
NEWCUR
BC37
NEWLIN
B860
NMN090
NMN900 AF1C
NMN990
AF1E
NOCLR
0020
NP
NRCERR 0083
NS
0080
NSTERR
0002
NULACC
NULL 0001
NUM
0002
NUMBER
00B8
NUMNAM
NUMNUM AEDA
NVAR
0004
NWC010
BC39
NXTIOB
NXTLN 0084
OLDCOL
005B
OLDROW
00 5A
OLLERR
OPEN 0003
OPNBUF
0560
□PR
0040
OPTAB
OREAD 0004
OWRIT
0008
PACTL
D302
PADDLO
PCTAB A40D
PCUP
0004
PEN
0553
PENPOS
PFD010 AB24
PFD020
AB29
PFD090
AB36
PKYRND
PMOVE B3C5
POINT
00B6
PP
OOCE
PRS010
PRS080 B 170
PRTSFD
AB IF
PRTSTG
B 1 53
PSETUP
PSF B809
PSF010
B822
PSTOP
A16C
PTEN
PTENL OOOA
PTRIGO
027C
PUP
A168
PUTC
PUTR 0009
QDI V
BE3C
QDV003
BE55
QDV006
QD VO 10 BE61
QDV090
BE7C
QDV093
BE83
GDV096
QDV099 BE8E
QML010
BDDB
QML015
BDFA
QML020
QML022 BE04
QML030
BEOA
GML040
BE2D
GML090
GMULT BDD 9
ONEGA
BE 8F
RADDI
BEA9
RDVOOO
RDV010 B259
RDV090
B249
RDYMES
BF33
RDYTXT
REMDEV B254
RESIT
ABEF
RITSTG
A9B4
RMARGN
ROWCRS 0054
RSEND
001 1
RSUBI
BEBO
RTCLOK
RUN OOFF
S1H
OOBO
S1L
OOAE
S2H
S2L 00B2
SAV010
ABC9
SAV080
AEE2
SAV090
SAV100 ABES
SAV190
ABEC
SAVIT
AEAO
SAVYR
SB 0080
SCD270
B 1 EC
SCD290
B1F2
SCD300
SCD310 BIFF
SCD900
B225
SCEOA
B7B9
SCL005
SCNDEV B1B7
SCNEOL
B802
SCNERR
0085
SCNLBL.
SCNMOD 0007
SCOMP
B2F8
SDEL2
B2A4
SDELET
SDL090 B2B7
SEN090
B39C
SEND
B39D
SETCUR
SETPGL B792
SETSVL
B79B
SF I 080
B29E
SFIND
SFN090 B18D
SFN100
B18E
SFN200
B 1 96
SFN220
SFN250 B1AF
SFNAME
B17E
SGETC
E414
SIGNON
SIN020 B2C0
SIN090
B2F7
SINSRT
B2B8
SINTAB
SINVAL BCC8
SJUMP
0508
SKCTL
D20F
SKPSEP
SKS090 B7F8
SKSTAT
D20F
SLB
B7FA
SM0010
A987
B427
270F
00D8
02E7
BFAE
BF61
BF61
BFC2
BF7D
BF99
00E2
A0D3
AOEE
A 1 34
A16C
A1B2
A1E9
BC64
BC95
00C6
BF32
B551
B527
AF1B
OOBE
B82F
A20C
B242
OOOF
A3B7
0270
0022
D20A
B 163
B3B7
B770
OOOB
BE5E
BE8C
BE02
BE3B
B24A
0001
0053
0012
00B4
ABE4
0552
B1F3
B7CB
B7C 1
B29F
BC96
B281
B 1 AO
0017
BD2C
B7EE
B3EF
PILOT
H. B. STEWART
SM0090
B402
SMOVI
B3DA
SNV010
BCD9
SNV020
BCE9
SNV040
BCFD
SNV100
BD09
SNV120
BD17
SNV150
BD21
SNV900
BD29
SNXTI
B410
SOP
B91B
S0P050
B93B
SP
OOCA
SPARES
OOOE
SPLIT
0010
SPUTC
E416
SSKCTL
0232
SSPEC
E41 A
STAB
A9A9
STICKO
0278
STMLST
B792
STRIGO
0284
SVAR
0008
SYCMND
A2A6
TABLEN
00D5
TADDI
BDC5
TCOL
0028
TELN
008C
TEMP
00A1
TEMP2
00A7
TEX005
B94A
TEX010
B95B
TEX020
E972
TEX 100
B979
TEX210
B981
TEX220
B986
TEX300
E998
TEX400
B9A2
TEX480
B9BA
TEXBUF
0577
TEXLNG
OOFE
TEXP
B943
TEXT
0020
THETA
00F2
TIN
B 130
TMU005
BD95
TMU008
BD9B
TMU010
BD9D
TMU020
BDB8
TMU090
BDC4
TMULT
BD83
T0N010
BECA
TDN020
BEDF
TQN090
BEF 1
TONES
BEC8
TOUT
B13C
TRACE
0575
TRAILB
B9A8
TRCMES
0018
TROW
0018
TXTCOL
0291
UNDERR
OOOA
USESTK
050B
USOERR
008B
USTKP
0090
USTKSZ
0010
USVAR
0010
VARTAB
051B
WARMST
0008
XAC003
A7EE
XAC009
A7FB
XAC020
A7FC
XAC022
A814
XAC023
A81E
XAC024
A840
XAC025
A84A
XAC026
A852
XAC027
A860
X AC 028
A867
XAC030
A875
X AC 031
A87A
X AC 100
A889
XAC1 10
A88B
XAC120
A89B
XAC190
A8B 1
XAC23B
A836
XACCPT
A7E3
XAU090
AED9
XAUTO
AEC 1
XC
0050
XCA090
ADA1
XCALL
AAOC
XCASS
AD91
XCL080
AA1F
XCL090
AA21
XCL100
AA22
XCM092
AB48
XCM100
AB4B
XCM120
AB79
XCM200
AB7E
XCM300
AB91
XCM900
AB9F
XCMPUT
AB37
XCS010
ADAD
XCS020
ADB5
XCS080
ADBD
XCS090
ADBF
XCSYNC
ADA2
XDN090
AD6C
XDONE
AD5C
XDOS
A7B8
XDS090
A7AA
XDU005
AADF
XDU020
AAF7
XDU040
AB04
XDU080
ABM
XDU090
AAD4
XDUMP
AAD5
XEN090
A7A8
XEN095
A7AB
XEND
A792
XGR020
ACOA
XGRAPH
ABFE
XIN
ACDE
XIN030
ADOC
XIN035
ADI A
XIN040
AD21
XIN080
ACDB
XIN090
ACDD
XJM010
AAAE
XJM030
AAB5
XJM040
AABA
XJM043
AACA
XJM045
AACD
XJM050
AAD2
XJM090
AAD4
X JMP
AA48
XJMPM
AAA7
XJP005
AA4D
XJP030
AA65
XJP040
AA77
XJP060
AA9A
XJP200
AAA2
X JUMP
0502
XLD050
AE1F
XLD090
AE01
XLIST
AE26
XLOAD
AE05
XLS009
AE2F
XLS029
AE53
XLS180
AE6E
XLS200
AE74
XLS230
AE7E
XLS235
AE82
XLS240
AE90
XLS250
AEB 1
XLS260
AEB9
XLS900
AEBE
XLS990
AECO
XMA009
A8BE
XMA010
A8BF
XMA050
A8E3
XMA060
A8EF
XMA100
A8F5
XMA120
A8FF
XMA140
A919
XMA160
A929
XMA200
A938
XMA300
A93E
XMA400
A948
XMATCH
A8B6
XMS080
A982
XMS090
A986
XMWSP
A95 1
XNE090
A9F5
XNEW
A9F8
XNEWV
A9BA
XNU010
AF32
XNU080
AF58
XNU090
AF5F
XNU190
AF60
XNV008
A9CD
XNV010
A9CE
XNV020
A9E5
XNV080
A9EE
XNV090
A9F5
X0T005
AD3A
X0T010
AD45
X0T020
AD52
X0T090
AD5B
XOUT
AD29
XP0020
A776
XP0090
A78E
XP0900
A78F
XPOS
A760
XREM
A75D
XREN
AF1F
XRN090
A7E2
XRUN
A7C0
XSAVE
ADD4
XSD020
ACA6
XSD023
ACBB
XSD027
ACBF
XSD030
ACCF
XSD085
ACDB
XSD090
ACDD
X SOUND
AC9B
XSV050
ADFC
XSV090
AE02
XTEMP
OOAB
XTP010
A6F 1
XTP020
A6F8
XTP022
A700
XTP025
A70C
XTP030
A70F
XTP035
A71B
XTP040
A72C
XTP050
A738
XTP080
A74A
XTP090
A74E
XTP400
A75D
XTR090
ADD3
XTRACE
ADCO
XTYPE
A6DC
XTYPE2
A74F
XTYPE3
A757
XUS090
AA41
XUS100
AA44
XUSE
AA25
XWAIT
AD6D
XWT010
AD78
XWT020
AD82
XWT090
ZNV010
AD6C
B83F
XXXX
OOFS
YC
0030
ZERVAR
B83B